Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seg Fault on illegal frame size > 65535 #251

Closed
fklassen opened this issue Jul 6, 2016 · 3 comments
Closed

Seg Fault on illegal frame size > 65535 #251

fklassen opened this issue Jul 6, 2016 · 3 comments
Assignees
Labels
Milestone

Comments

@fklassen
Copy link
Member

fklassen commented Jul 6, 2016

From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829350

Note that this may already be fixed. Verification required.

Package: tcpreplay
Version: 3.4.4-2
Severity: important
Tags: patch

Dear Maintainer,

as previously discussed in other places: The tcprewrite program
(src:tcpreplay) has a compile-time limit of the maximum frame size of
65535 it can handle. However, incoming frames are not checked against
that limit, and such frames do happen in the wild when capturing on the
With an MTU size of 65536 on the capturing host - default since kernel
3.6-ish and Debian jessie -, and and ethernet header added, a frame size
of 65549 exceeds that limit, sometimes resulting in a segmentation
fault. Reproducer available upon request.

As far as I can see this still exists in the not-yet packaged
tcpreplay-4.1.1.

The patch attached raises the limit and also adds a size check.
Additionally, I've prepared debdiffs for wheezy and jessie to address
this in a point release.

If you want more about that package, you know where to find me.

    Christoph

-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 4.4.13 (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash
Init: unable to detect
@fklassen
Copy link
Member Author

fklassen commented Jul 8, 2016

@Whissi
Copy link

Whissi commented Nov 19, 2016

The patch from Christoph which Debian has applied is not present in current git master, see https://github.com/appneta/tcpreplay/blob/master/src/tcprewrite.c#L249-L256

Patch was

Subject: tcprewrite: Handle frames of 65535 octets size
Author: Christoph Biedl <debian.axhn[ A T ]manchmal.in-ulm.de>
Date: Mon Jun 29 17:08:24 2015 +0200

diff --git a/src/defines.h.in b/src/defines.h.in
index 3a1bf1e..5468d14 100644
--- a/src/defines.h.in
+++ b/src/defines.h.in
@@ -104,7 +104,7 @@ typedef struct tcpr_speed_s tcpr_speed_t;
 #define DEFAULT_MTU 1500        /* Max Transmission Unit of standard ethernet
                                  * don't forget *frames* are MTU + L2 header! */

-#define MAXPACKET 65535         /* was 16436 linux loopback, but maybe something is bigger then 
+#define MAXPACKET 65549         /* was 16436 linux loopback, but maybe something is bigger then 
                                    linux loopback */

 #define MAX_SNAPLEN 65535       /* tell libpcap to capture the entire packet */
diff --git a/src/tcprewrite.c b/src/tcprewrite.c
index 90a6f2e..9c32a5e 100644
--- a/src/tcprewrite.c
+++ b/src/tcprewrite.c
@@ -253,6 +253,8 @@ rewrite_packets(tcpedit_t *tcpedit, pcap_t *pin, pcap_dumper_t *pout)
         packetnum++;
         dbgx(2, "packet " COUNTER_SPEC " caplen %d", packetnum, pkthdr.caplen);

+        if (pkthdr.caplen > MAXPACKET)
+            errx(-1, "Frame too big, caplen %d exceeds %d", pkthdr.caplen, MAXPACKET);
         /* 
          * copy over the packet so we can pad it out if necessary and
          * because pcap_next() returns a const ptr

@fklassen fklassen added the 4.1.2 label Nov 19, 2016
@fklassen fklassen self-assigned this Nov 19, 2016
@fklassen fklassen added this to the v4.1.2 milestone Nov 19, 2016
fklassen added a commit that referenced this issue Nov 19, 2016
@fklassen
Copy link
Member Author

Applied patch in PR #264

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants