]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Add GET_IP{6}ADDR_STRING() macros and get_ip{6}addr_string() functions
authorFrancois-Xavier Le Bail <[email protected]>
Mon, 12 Aug 2019 14:25:40 +0000 (16:25 +0200)
committerFrancois-Xavier Le Bail <[email protected]>
Mon, 12 Aug 2019 14:25:40 +0000 (16:25 +0200)
With setjmp/longjmp logic to call the ip{6}addr_string() functions
after bounds checking.

The macros must be used on a packet buffer pointer.

addrtoname.h

index 9b78ac06b7bb4aa8b68c38d32fb1d5b5fd1e2abe..201ab431a455f1b375c03852fdc9d3d88cecd3ef 100644 (file)
@@ -64,6 +64,22 @@ extern const char * ieee8021q_tci_string(const uint16_t);
  * The macro(s) must be used on a packet buffer pointer.
  */
 
+static inline const char *
+get_ipaddr_string(netdissect_options *ndo, const u_char *p)
+{
+        if (!ND_TTEST_4(p))
+                longjmp(ndo->ndo_truncated, 1);
+        return ipaddr_string(ndo, p);
+}
+
+static inline const char *
+get_ip6addr_string(netdissect_options *ndo, const u_char *p)
+{
+        if (!ND_TTEST_16(p))
+                longjmp(ndo->ndo_truncated, 1);
+        return ip6addr_string(ndo, p);
+}
+
 static inline const char *
 get_le64addr_string(netdissect_options *ndo, const u_char *p)
 {
@@ -72,4 +88,6 @@ get_le64addr_string(netdissect_options *ndo, const u_char *p)
         return le64addr_string(ndo, p);
 }
 
+#define GET_IPADDR_STRING(p) get_ipaddr_string(ndo, (const u_char *)(p))
+#define GET_IP6ADDR_STRING(p) get_ip6addr_string(ndo, (const u_char *)(p))
 #define GET_LE64ADDR_STRING(p) get_le64addr_string(ndo, (const u_char *)(p))