Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Mar 2015 20:09:48 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r280050 - head/sys/dev/wpi
Message-ID:  <201503152009.t2FK9mh0049080@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Sun Mar 15 20:09:47 2015
New Revision: 280050
URL: https://svnweb.freebsd.org/changeset/base/280050

Log:
  Fix mbuf mapping errors in wpi_cmd2() + add check for nsegs
  
  PR:		kern/197143
  Submitted by:	Andriy Voskoboinyk <s3erios@gmail.com>

Modified:
  head/sys/dev/wpi/if_wpi.c

Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c	Sun Mar 15 19:37:07 2015	(r280049)
+++ head/sys/dev/wpi/if_wpi.c	Sun Mar 15 20:09:47 2015	(r280050)
@@ -2272,7 +2272,7 @@ wpi_cmd2(struct wpi_softc *sc, struct wp
 	}
 	if (error != 0) {
 		/* Too many DMA segments, linearize mbuf. */
-		m1 = m_collapse(buf->m, M_NOWAIT, WPI_MAX_SCATTER);
+		m1 = m_collapse(buf->m, M_NOWAIT, WPI_MAX_SCATTER - 1);
 		if (m1 == NULL) {
 			device_printf(sc->sc_dev,
 			    "%s: could not defrag mbuf\n", __func__);
@@ -2291,6 +2291,10 @@ wpi_cmd2(struct wpi_softc *sc, struct wp
 		}
 	}
 
+	KASSERT(nsegs < WPI_MAX_SCATTER,
+	    ("too many DMA segments, nsegs (%d) should be less than %d",
+	     nsegs, WPI_MAX_SCATTER));
+
 	data->m = buf->m;
 	data->ni = buf->ni;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503152009.t2FK9mh0049080>