summaryrefslogtreecommitdiff
path: root/usr.sbin/tcpdump
diff options
context:
space:
mode:
authorOtto Moerbeek <otto@cvs.openbsd.org>2004-02-04 08:35:13 +0000
committerOtto Moerbeek <otto@cvs.openbsd.org>2004-02-04 08:35:13 +0000
commita692fc0ef6481191f5808e355cdec541e7cafb18 (patch)
treec50146948a18ec0e859e995816249f1e6ebb496f /usr.sbin/tcpdump
parent7ae9a60262917bae9ffe0b7a63e84e4177a687f9 (diff)
Some more non-alignment problems resolved.
ok deraadt@
Diffstat (limited to 'usr.sbin/tcpdump')
-rw-r--r--usr.sbin/tcpdump/addrtoname.c7
-rw-r--r--usr.sbin/tcpdump/print-atalk.c7
-rw-r--r--usr.sbin/tcpdump/print-ip.c7
-rw-r--r--usr.sbin/tcpdump/print-ip6.c28
4 files changed, 31 insertions, 18 deletions
diff --git a/usr.sbin/tcpdump/addrtoname.c b/usr.sbin/tcpdump/addrtoname.c
index 087e84fef5d..7ad261ee278 100644
--- a/usr.sbin/tcpdump/addrtoname.c
+++ b/usr.sbin/tcpdump/addrtoname.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: addrtoname.c,v 1.22 2004/02/02 09:43:27 otto Exp $ */
+/* $OpenBSD: addrtoname.c,v 1.23 2004/02/04 08:35:12 otto Exp $ */
/*
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -25,7 +25,7 @@
*/
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/addrtoname.c,v 1.22 2004/02/02 09:43:27 otto Exp $ (LBL)";
+ "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/addrtoname.c,v 1.23 2004/02/04 08:35:12 otto Exp $ (LBL)";
#endif
#include <sys/types.h>
@@ -46,6 +46,7 @@ struct rtentry;
#include <arpa/inet.h>
#include <ctype.h>
+#include <inttypes.h>
#include <netdb.h>
#include <pcap.h>
#include <pcap-namedb.h>
@@ -169,7 +170,7 @@ getname(const u_char *ap)
/*
* Extract 32 bits in network order, dealing with alignment.
*/
- switch ((long)ap & 3) {
+ switch ((intptr_t)ap & (sizeof(u_int32_t)-1)) {
case 0:
addr = *(u_int32_t *)ap;
diff --git a/usr.sbin/tcpdump/print-atalk.c b/usr.sbin/tcpdump/print-atalk.c
index 403b1958bc9..b52240788cd 100644
--- a/usr.sbin/tcpdump/print-atalk.c
+++ b/usr.sbin/tcpdump/print-atalk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: print-atalk.c,v 1.22 2004/02/02 09:43:27 otto Exp $ */
+/* $OpenBSD: print-atalk.c,v 1.23 2004/02/04 08:35:12 otto Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -25,7 +25,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/print-atalk.c,v 1.22 2004/02/02 09:43:27 otto Exp $ (LBL)";
+ "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/print-atalk.c,v 1.23 2004/02/04 08:35:12 otto Exp $ (LBL)";
#endif
#include <sys/param.h>
@@ -46,6 +46,7 @@ struct rtentry;
#include <netinet/tcp.h>
#include <netinet/tcpip.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -223,7 +224,7 @@ ddp_print(register const u_char *bp, register u_int length, register int t,
register u_short snet, register u_char snode, u_char skt)
{
- if ((long)bp & 3) {
+ if ((intptr_t)bp & (sizeof(long)-1)) {
static u_char *abuf = NULL;
if (abuf == NULL) {
diff --git a/usr.sbin/tcpdump/print-ip.c b/usr.sbin/tcpdump/print-ip.c
index ad025421e17..3542cd6439b 100644
--- a/usr.sbin/tcpdump/print-ip.c
+++ b/usr.sbin/tcpdump/print-ip.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: print-ip.c,v 1.23 2004/02/02 09:43:27 otto Exp $ */
+/* $OpenBSD: print-ip.c,v 1.24 2004/02/04 08:35:12 otto Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -23,7 +23,7 @@
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/print-ip.c,v 1.23 2004/02/02 09:43:27 otto Exp $ (LBL)";
+ "@(#) $Header: /cvs/OpenBSD/src/usr.sbin/tcpdump/print-ip.c,v 1.24 2004/02/04 08:35:12 otto Exp $ (LBL)";
#endif
#include <sys/param.h>
@@ -39,6 +39,7 @@ static const char rcsid[] =
#include <netinet/tcp.h>
#include <netinet/tcpip.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -364,7 +365,7 @@ ip_print(register const u_char *bp, register u_int length)
* This will never happen with BPF. It does happen with raw packet
* dumps from -r.
*/
- if ((long)ip & 3) {
+ if ((intptr_t)ip & (sizeof(long)-1)) {
static u_char *abuf = NULL;
static int didwarn = 0;
diff --git a/usr.sbin/tcpdump/print-ip6.c b/usr.sbin/tcpdump/print-ip6.c
index 3dee1dc64a5..79dc408e0fe 100644
--- a/usr.sbin/tcpdump/print-ip6.c
+++ b/usr.sbin/tcpdump/print-ip6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: print-ip6.c,v 1.4 2003/01/27 10:00:40 henning Exp $ */
+/* $OpenBSD: print-ip6.c,v 1.5 2004/02/04 08:35:12 otto Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
@@ -41,8 +41,10 @@ static const char rcsid[] =
#include <netinet/udp_var.h>
#include <netinet/tcp.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include "interface.h"
@@ -65,23 +67,31 @@ ip6_print(register const u_char *bp, register int length)
ip6 = (const struct ip6_hdr *)bp;
-#ifdef TCPDUMP_ALIGN
/*
* The IP header is not word aligned, so copy into abuf.
* This will never happen with BPF. It does happen with
* raw packet dumps from -r.
*/
- if ((int)ip & (sizeof(long)-1)) {
- static u_char *abuf;
+ if ((intptr_t)ip6 & (sizeof(long)-1)) {
+ static u_char *abuf = NULL;
+ static int didwarn = 0;
- if (abuf == NULL)
+ if (abuf == NULL) {
abuf = (u_char *)malloc(snaplen);
- bcopy((char *)ip, (char *)abuf, min(length, snaplen));
- snapend += abuf - (u_char *)ip;
+ if (abuf == NULL)
+ error("ip6_print: malloc");
+ }
+ memcpy((char *)abuf, (char *)ip6, min(length, snaplen));
+ snapend += abuf - (u_char *)ip6;
packetp = abuf;
- ip = (struct ip6_hdr *)abuf;
+ ip6 = (struct ip6_hdr *)abuf;
+ /* We really want libpcap to give us aligned packets */
+ if (!didwarn) {
+ warning("compensating for unaligned libpcap packets");
+ ++didwarn;
+ }
}
-#endif
+
if ((u_char *)(ip6 + 1) > snapend) {
printf("[|ip6]");
return;