⬢ DragonFlyBSD Kernel Audit
DF-2516 / fix.diff
← back to finding ↓ download raw
--- /home/maxx/dfbsd/dfbsd/sys/bus/firewire/firewire.c	2026-06-29 12:51:18.000000000 +0000
+++ sys/bus/firewire/firewire.c	2026-10-24 09:11:52.110751358 +0000
@@ -963,7 +963,11 @@
 		}
 	}
 	if (recv_len > 0) {
-		xfer->recv.payload = kmalloc(recv_len, type, M_INTWAIT);
+		/* M_ZERO: upper layers (e.g. sbp) cast the payload to fixed
+		 * structs and act on every field; short deliveries must
+		 * never expose stale heap bytes. */
+		xfer->recv.payload = kmalloc(recv_len, type,
+		    M_INTWAIT | M_ZERO);
 		if (xfer->recv.payload == NULL) {
 			if (xfer->send.payload != NULL)
 				kfree(xfer->send.payload, type);