summaryrefslogtreecommitdiffstats
path: root/sys/net/bpf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net/bpf.c')
-rw-r--r--sys/net/bpf.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index ffaa762..e11b3e0 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -443,13 +443,19 @@ bpf_movein(struct uio *uio, int linktype, struct ifnet *ifp, struct mbuf **mp,
if (len - hlen > ifp->if_mtu)
return (EMSGSIZE);
- if ((unsigned)len > MCLBYTES)
+ if ((unsigned)len > MJUM16BYTES)
return (EIO);
- if (len > MHLEN)
+ if (len <= MHLEN)
+ MGETHDR(m, M_WAIT, MT_DATA);
+ else if (len <= MCLBYTES)
m = m_getcl(M_WAIT, MT_DATA, M_PKTHDR);
else
- MGETHDR(m, M_WAIT, MT_DATA);
+ m = m_getjcl(M_WAIT, MT_DATA, M_PKTHDR,
+#if (MJUMPAGESIZE > MCLBYTES)
+ len <= MJUMPAGESIZE ? MJUMPAGESIZE :
+#endif
+ (len <= MJUM9BYTES ? MJUM9BYTES : MJUM16BYTES));
m->m_pkthdr.len = m->m_len = len;
m->m_pkthdr.rcvif = NULL;
*mp = m;
OpenPOWER on IntegriCloud