diff options
author | glebius <glebius@FreeBSD.org> | 2015-10-07 12:40:00 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2015-10-07 12:40:00 +0000 |
commit | daa604f29470fbd4f5eac28fbe136749017b98ab (patch) | |
tree | de2fa767d33e653d534fd4a2dd87dc10215b7739 | |
parent | a2200eb70bd6c71b3c2a9fc1a23fa2580e8d07a9 (diff) | |
download | FreeBSD-src-daa604f29470fbd4f5eac28fbe136749017b98ab.zip FreeBSD-src-daa604f29470fbd4f5eac28fbe136749017b98ab.tar.gz |
Fix regression from r248371. We need to copy packet header to new
mbuf. Unlike in the pre-r248371 code, assert that M_PKTHDR is set
only on a first mbuf.
Reported & tested by: Andriy Voskoboinyk <s3erios gmail.com>
Sponsored by: Nginx, Inc.
-rw-r--r-- | sys/kern/uipc_mbuf.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c index fcb112d..7f994fe 100644 --- a/sys/kern/uipc_mbuf.c +++ b/sys/kern/uipc_mbuf.c @@ -1867,6 +1867,11 @@ m_unshare(struct mbuf *m0, int how) m_freem(m0); return (NULL); } + if (m->m_flags & M_PKTHDR) { + KASSERT(mprev == NULL, ("%s: m0 %p, m %p has M_PKTHDR", + __func__, m0, m)); + m_move_pkthdr(n, m); + } len = m->m_len; off = 0; mfirst = n; |