DragonFlyBSD Kernel Audit
DF-1614 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/netif/sln/if_sln.c b/sys/dev/netif/sln/if_sln.c
--- a/sys/dev/netif/sln/if_sln.c
+++ b/sys/dev/netif/sln/if_sln.c
@@ -901,11 +901,13 @@
 		if_printf(ifp, "\n");
 #endif
 		/* No errors; receive the packet. */
-		if (rx_bufpos == (sc->sln_bufdata.sln_rx_buf + SL_RX_BUFLEN))
+		if (rx_bufpos >= (sc->sln_bufdata.sln_rx_buf + SL_RX_BUFLEN))
 			rx_bufpos = sc->sln_bufdata.sln_rx_buf;
 
 		rx_bufpos = rx_bufpos + 4;	/* 4 bytes for receive frame
 						 * header */
+		if (rx_bufpos >= (sc->sln_bufdata.sln_rx_buf + SL_RX_BUFLEN))
+			rx_bufpos = sc->sln_bufdata.sln_rx_buf;
 		rx_space = (u_long)((sc->sln_bufdata.sln_rx_buf + SL_RX_BUFLEN) - rx_bufpos);
 
 		if (pkt_size > rx_space) {