svn commit: r306690 - stable/11/sys/dev/cxgbe
John Baldwin
jhb at FreeBSD.org
Tue Oct 4 22:15:43 UTC 2016
Author: jhb
Date: Tue Oct 4 22:15:42 2016
New Revision: 306690
URL: https://svnweb.freebsd.org/changeset/base/306690
Log:
MFC 305548: Don't break out of the m_advance() loop if len drops to zero.
If a packet contains the Ethernet header (14 bytes) in the first mbuf
and the payload (IP + UDP + data) in the second mbuf, then the attempt
to fetch the l3hdr will return a NULL pointer. The first loop iteration
will drop len to zero and exit the loop without setting 'p'. However,
the desired data is at the start of the second mbuf, so the correct
behavior is to loop around and let the conditional set 'p' to m_data of
the next mbuf (and leave offset as 0).
Modified:
stable/11/sys/dev/cxgbe/t4_sge.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- stable/11/sys/dev/cxgbe/t4_sge.c Tue Oct 4 21:44:20 2016 (r306689)
+++ stable/11/sys/dev/cxgbe/t4_sge.c Tue Oct 4 22:15:42 2016 (r306690)
@@ -2081,7 +2081,7 @@ m_advance(struct mbuf **pm, int *poffset
MPASS(len > 0);
- while (len) {
+ for (;;) {
if (offset + len < m->m_len) {
offset += len;
p = mtod(m, uintptr_t) + offset;
More information about the svn-src-all
mailing list