⬢ DragonFlyBSD Kernel Audit
DF-4939 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/ic/if_ic.c	2026-09-25 07:24:38.504972636 +0000
+++ b/sys/dev/netif/ic/if_ic.c	2026-09-25 07:24:51.912799296 +0000
@@ -190,11 +190,14 @@
 	    if ((error = iicbus_request_bus(parent, icdev, IIC_WAIT|IIC_INTR)))
 		return (error);
 
-	    sc->ic_obuf = kmalloc(sc->ic_if.if_mtu + ICHDRLEN,
-				  M_DEVBUF, M_WAITOK);
-
-	    sc->ic_ifbuf = kmalloc(sc->ic_if.if_mtu + ICHDRLEN,
-				  M_DEVBUF, M_WAITOK);
+	    /* reuse buffers retained from a previous up (DF-4939) */
+	    if (sc->ic_obuf == NULL)
+		sc->ic_obuf = kmalloc(sc->ic_if.if_mtu + ICHDRLEN,
+				      M_DEVBUF, M_WAITOK);
+
+	    if (sc->ic_ifbuf == NULL)
+		sc->ic_ifbuf = kmalloc(sc->ic_if.if_mtu + ICHDRLEN,
+				      M_DEVBUF, M_WAITOK);
 
 	    iicbus_reset(parent, IIC_FASTEST, 0, NULL);