Make icmp_print() accept the length variable, which is the length of the
authorlteo <lteo@openbsd.org>
Sat, 11 Jan 2014 04:35:52 +0000 (04:35 +0000)
committerlteo <lteo@openbsd.org>
Sat, 11 Jan 2014 04:35:52 +0000 (04:35 +0000)
packet without the IP header.  This is needed by the next commit that
will allow tcpdump to detect bad ICMP checksums.

Related functions like {tcp,udp,icmp6}_print() already accept this
length variable, so this change makes icmp_print() consistent with
them as well.

This commit makes no functional change to tcpdump itself.

OK florian@

usr.sbin/tcpdump/interface.h
usr.sbin/tcpdump/print-icmp.c
usr.sbin/tcpdump/print-ip.c
usr.sbin/tcpdump/print-ipsec.c

index 202b427..7525dd9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: interface.h,v 1.61 2010/04/06 16:01:57 jsg Exp $      */
+/*     $OpenBSD: interface.h,v 1.62 2014/01/11 04:35:52 lteo Exp $     */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -20,7 +20,7 @@
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * @(#) $Id: interface.h,v 1.61 2010/04/06 16:01:57 jsg Exp $ (LBL)
+ * @(#) $Id: interface.h,v 1.62 2014/01/11 04:35:52 lteo Exp $ (LBL)
  */
 
 #ifndef tcpdump_interface_h
@@ -210,7 +210,7 @@ extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
 extern void ppp_ether_if_print(u_char *, const struct pcap_pkthdr *,
        const u_char *);
 extern void gre_print(const u_char *, u_int);
-extern void icmp_print(const u_char *, const u_char *);
+extern void icmp_print(const u_char *, u_int, const u_char *);
 extern void ieee802_11_if_print(u_char *, const struct pcap_pkthdr *,
     const u_char *);
 extern void ieee802_11_radio_if_print(u_char *, const struct pcap_pkthdr *,
index 6348b76..a554c0a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: print-icmp.c,v 1.20 2009/10/27 23:59:55 deraadt Exp $ */
+/*     $OpenBSD: print-icmp.c,v 1.21 2014/01/11 04:35:52 lteo Exp $    */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994, 1995, 1996
@@ -165,7 +165,7 @@ struct id_rdiscovery {
 };
 
 void
-icmp_print(const u_char *bp, const u_char *bp2)
+icmp_print(const u_char *bp, u_int length, const u_char *bp2)
 {
        const struct icmp *dp;
        const struct ip *ip;
index dacbeef..c332498 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: print-ip.c,v 1.36 2010/01/12 06:10:33 naddy Exp $     */
+/*     $OpenBSD: print-ip.c,v 1.37 2014/01/11 04:35:52 lteo Exp $      */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -427,7 +427,7 @@ ip_print(register const u_char *bp, register u_int length)
                        break;
 
                case IPPROTO_ICMP:
-                       icmp_print(cp, (const u_char *)ip);
+                       icmp_print(cp, len, (const u_char *)ip);
                        break;
 
 #ifndef IPPROTO_IGRP
index a4d1ed4..8be8eb4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: print-ipsec.c,v 1.17 2012/05/03 10:17:23 mikeb Exp $  */
+/*     $OpenBSD: print-ipsec.c,v 1.18 2014/01/11 04:35:52 lteo Exp $   */
 
 /*
  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
@@ -187,7 +187,7 @@ esp_decrypt (const u_char *bp, u_int len, const u_char *bp2)
                ip_print(data, len);
                break;
        case IPPROTO_ICMP:
-               icmp_print(data, bp2);
+               icmp_print(data, len, bp2);
                break;
        case IPPROTO_ICMPV6:
                icmp6_print(data, len, bp2);
@@ -298,7 +298,8 @@ ah_print (register const u_char *bp, register u_int len,
                        break;
 
                case IPPROTO_ICMP: /* From here and down; Transport mode */
-                       icmp_print(bp + pl_len, (const u_char *) ip);
+                       icmp_print(bp + pl_len, len - pl_len,
+                                 (const u_char *) ip);
                        break;
 
                case IPPROTO_ICMPV6: