summaryrefslogtreecommitdiffstats
path: root/usr.sbin/tcpdump/print-gre.c
diff options
context:
space:
mode:
authorjca <jca@openbsd.org>2015-11-05 11:55:21 +0000
committerjca <jca@openbsd.org>2015-11-05 11:55:21 +0000
commitafc56190342cce42f4f1c29f5d014b43157f71e7 (patch)
tree3104f964cdaeff5bf325d690d86b5215a28fe1ea /usr.sbin/tcpdump/print-gre.c
parentWhen fetching the GRE version, use GRE_VERS and not a naked "7" as mask. (diff)
downloadwireguard-openbsd-afc56190342cce42f4f1c29f5d014b43157f71e7.tar.xz
wireguard-openbsd-afc56190342cce42f4f1c29f5d014b43157f71e7.zip
Cap the GRE packet len to tcpdump's snap len, fixes a segfault.
From Kevin Reay, ok sthen@
Diffstat (limited to 'usr.sbin/tcpdump/print-gre.c')
-rw-r--r--usr.sbin/tcpdump/print-gre.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/usr.sbin/tcpdump/print-gre.c b/usr.sbin/tcpdump/print-gre.c
index 58122443ed4..726d8be1b24 100644
--- a/usr.sbin/tcpdump/print-gre.c
+++ b/usr.sbin/tcpdump/print-gre.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: print-gre.c,v 1.10 2015/11/05 11:52:24 jca Exp $ */
+/* $OpenBSD: print-gre.c,v 1.11 2015/11/05 11:55:21 jca Exp $ */
/*
* Copyright (c) 2002 Jason L. Wright (jason@thought.net)
@@ -73,6 +73,9 @@ gre_print(const u_char *bp, u_int length)
{
u_int len = length, vers;
+ if (bp + len > snapend)
+ len = snapend - bp;
+
if (len < 2) {
printf("[|gre]");
return;