⬢ DragonFlyBSD Kernel Audit
DF-3630 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/iwm/if_iwm.c	2026-09-15 10:51:39.216775004 +0000
+++ b/sys/dev/netif/iwm/if_iwm.c	2026-09-15 10:51:59.596513305 +0000
@@ -2782,6 +2782,11 @@
 		lmac2 = &palive->lmac_data[1];
 		status = le16toh(palive->status);
 	} else {
+		if (iwm_rx_packet_payload_len(pkt) < sizeof(*palive3)) {
+			device_printf(sc->sc_dev,
+			    "%s: truncated ALIVE notification\n", __func__);
+			return FALSE;
+		}
 		palive3 = (void *)pkt->data;
 		umac = &palive3->umac_data;
 		lmac1 = &palive3->lmac_data;
@@ -5509,8 +5514,10 @@
 		case IWM_NVM_ACCESS_CMD:
 		case IWM_MCC_UPDATE_CMD:
 			if (sc->sc_wantresp == (((qid & ~0x80) << 16) | idx)) {
-				memcpy(sc->sc_cmd_resp,
-				    pkt, sizeof(sc->sc_cmd_resp));
+				size_t clen = len;	/* actual packet bytes */
+				if (clen > sizeof(sc->sc_cmd_resp))
+					clen = sizeof(sc->sc_cmd_resp);
+				memcpy(sc->sc_cmd_resp, pkt, clen);
 			}
 			break;