svn commit: r266973 - stable/9/sys/dev/cxgbe
Navdeep Parhar
np at FreeBSD.org
Mon Jun 2 17:34:09 UTC 2014
Author: np
Date: Mon Jun 2 17:34:08 2014
New Revision: 266973
URL: http://svnweb.freebsd.org/changeset/base/266973
Log:
MFC r266908:
cxgbe(4): Fix a NULL dereference when the very first call to
get_scatter_segment() in get_fl_payload() fails. While here,
fix the code to adjust fl_bufs_used when a failure occurs for
any other scatter segment.
Approved by: re (glebius)
Modified:
stable/9/sys/dev/cxgbe/t4_sge.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- stable/9/sys/dev/cxgbe/t4_sge.c Mon Jun 2 15:05:25 2014 (r266972)
+++ stable/9/sys/dev/cxgbe/t4_sge.c Mon Jun 2 17:34:08 2014 (r266973)
@@ -1536,6 +1536,7 @@ get_fl_payload(struct adapter *sc, struc
nbuf = 0;
len = G_RSPD_LEN(len_newbuf);
if (__predict_false(fl->m0 != NULL)) {
+ M_ASSERTPKTHDR(fl->m0);
MPASS(len == fl->m0->m_pkthdr.len);
MPASS(fl->remaining < len);
@@ -1559,6 +1560,8 @@ get_fl_payload(struct adapter *sc, struc
*/
m0 = get_scatter_segment(sc, fl, len, M_PKTHDR);
+ if (m0 == NULL)
+ goto done;
len -= m0->m_len;
pnext = &m0->m_next;
while (len > 0) {
@@ -1570,7 +1573,8 @@ get_segment:
fl->m0 = m0;
fl->pnext = pnext;
fl->remaining = len;
- return (NULL);
+ m0 = NULL;
+ goto done;
}
*pnext = m;
pnext = &m->m_next;
@@ -1579,7 +1583,7 @@ get_segment:
*pnext = NULL;
if (fl->rx_offset == 0)
nbuf++;
-
+done:
(*fl_bufs_used) += nbuf;
return (m0);
}
More information about the svn-src-stable-9
mailing list