diff options
author | nsayer <nsayer@FreeBSD.org> | 2000-09-25 17:24:02 +0000 |
---|---|---|
committer | nsayer <nsayer@FreeBSD.org> | 2000-09-25 17:24:02 +0000 |
commit | 72c8811083b11214841357c89840ddd617af521e (patch) | |
tree | d639ec0488a3068d57e5eb7ffeef2ae9c113f597 /sys/net/bridge.c | |
parent | 63438a4afe1d5d7fabd91bd0ed71e4f23223e788 (diff) | |
download | FreeBSD-src-72c8811083b11214841357c89840ddd617af521e.zip FreeBSD-src-72c8811083b11214841357c89840ddd617af521e.tar.gz |
In theory, m_dup should not be necessary, as m_copypacket should be
sifficient. But somewhere (I believe in the UDP stuff), someone is
overwriting an mbuf without calling m_pullup() first. This results in
broad- and multi-cast traffic that is passed through the bridge getting
corrupted.
This should be backed out when there is some assurance that the upper
layers (and I suppose all of the device drivers) are fixed.
Suggested by: archie
Diffstat (limited to 'sys/net/bridge.c')
-rw-r--r-- | sys/net/bridge.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/net/bridge.c b/sys/net/bridge.c index 106ddac..7116346 100644 --- a/sys/net/bridge.c +++ b/sys/net/bridge.c @@ -802,10 +802,10 @@ forward: if (canfree && once ) { /* no need to copy */ m = *m0 ; *m0 = NULL ; /* original is gone */ - } else /* on a P5-90, m_copypacket takes 540 ticks */ - m = m_copypacket(*m0, M_DONTWAIT); + } else + m = m_dup(*m0, M_DONTWAIT); /* XXX m_copypacket should work */ if (m == NULL) { - printf("bdg_forward: sorry, m_copy failed!\n"); + printf("bdg_forward: sorry, m_dup failed!\n"); return ENOBUFS ; /* the original is still there... */ } /* |