⬢ DragonFlyBSD Kernel Audit
DF-4795 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/ig_hal/e1000_vf.c
+++ b/sys/dev/netif/ig_hal/e1000_vf.c
@@ -400,7 +400,7 @@
 void e1000_update_mc_addr_list_vf(struct e1000_hw *hw,
 				  u8 *mc_addr_list, u32 mc_addr_count)
 {
-	u32 msgbuf[E1000_VFMAILBOX_SIZE];
+	u32 msgbuf[E1000_VFMAILBOX_SIZE] = { 0 };
 	u16 *hash_list = (u16 *)&msgbuf[1];
 	u32 hash_value;
 	u32 i;
@@ -419,11 +419,12 @@
 	DEBUGOUT1("MC Addr Count = %d\n", mc_addr_count);
 
 	if (mc_addr_count > 30) {
-		msgbuf[0] |= E1000_VF_SET_MULTICAST_OVERFLOW;
+		msgbuf[0] = E1000_VF_SET_MULTICAST |
+			    E1000_VF_SET_MULTICAST_OVERFLOW;
 		mc_addr_count = 30;
+	} else {
+		msgbuf[0] = E1000_VF_SET_MULTICAST;
 	}
-
-	msgbuf[0] = E1000_VF_SET_MULTICAST;
 	msgbuf[0] |= mc_addr_count << E1000_VT_MSGINFO_SHIFT;
 
 	for (i = 0; i < mc_addr_count; i++) {