Date: Tue, 7 Jan 1997 21:37:10 -0800 (PST) From: seki@sysrap.cs.fujitsu.co.jp To: freebsd-gnats-submit@freebsd.org Subject: kern/2415: Writing into bpf makes a malformed mbuf delivered to Ethernet driver Message-ID: <199701080537.VAA13925@freefall.freebsd.org> Resent-Message-ID: <199701080540.VAA14118@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2415
>Category: kern
>Synopsis: Writing into bpf makes a malformed mbuf delivered to Ethernet driver
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Jan 7 21:40:00 PST 1997
>Last-Modified:
>Originator: Masahiro Sekiguchi
>Organization:
Fujitsu Limited
>Release: 2.2 BETA
>Environment:
>Description:
When debugging PAO portion of my if_fe driver, I found the driver
receive packets stored in malformed mbuf to send out. That is,
m_pkthdr.len in the first mbuf was 14 bytes larger than the sum
of m_len values in the chain.
The fe driver relies on m_pkthdr.len, and, if such packets come
when the transmission packet queue is long, (e.g., heavy network
load,) the driver will crush.
After analyzing the case, I found the malformed packets came
from dhcpc daemon of WIDE dhcp package through bpfilter
device. all packets from dhcpc seemed to have 14 bytes larger
value stored in m_pkthdr.len.
I'm not completely sure yet, but I guess it is a bug in bpf.c
>How-To-Repeat:
Run dhcpc in WIDE dhcp (which is available as a part of 2.2 packages) with any Ethernet driver.
With ddb (or any other kernel debugger), catch an mbuf from
dhcpc at the entry to the Ethernet driver (DEVICE_start routine.)
Dump the mbuf.
>Fix:
I suggest the following patch to sys/net/bpf.c:
--- bpf.old.c Wed Jan 8 13:22:26 1997
+++ bpf.c Wed Jan 8 13:26:12 1997
@@ -227,6 +227,7 @@
* Make room for link header.
*/
if (hlen != 0) {
+ m->m_pkthdr.len -= hlen;
m->m_len -= hlen;
#if BSD >= 199103
m->m_data += hlen; /* XXX */
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701080537.VAA13925>
