DragonFlyBSD Kernel Audit
DF-0548 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/net/netmap/netmap_mem2.c b/sys/net/netmap/netmap_mem2.c
--- a/sys/net/netmap/netmap_mem2.c
+++ b/sys/net/netmap/netmap_mem2.c
@@ -675,7 +675,8 @@
 	}
 	/* buffers 0 and 1 are reserved */
 	nmd->pools[NETMAP_BUF_POOL].objfree -= 2;
-	nmd->pools[NETMAP_BUF_POOL].bitmap[0] = ~3;
+	/* only mark object 0/1 as in-use; remaining bits follow objtotal */
+	nmd->pools[NETMAP_BUF_POOL].bitmap[0] = (nmd->pools[NETMAP_BUF_POOL].objtotal >= 32) ? ~3 : ~((~0U) << nmd->pools[NETMAP_BUF_POOL].objtotal) | 3;
 	nmd->flags |= NETMAP_MEM_FINALIZED;
 
 	D("Have %d KB for interfaces, %d KB for rings and %d MB for buffers",