git: a09034d561cb - main - e1000: fix data type in MAC hash

Kevin Bowling <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a7b8d4a.38313.252bb5a5__22983.5782128916$1786482041$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by kbowling:

URL: https://cgit.FreeBSD.org/src/commit/?id=a09034d561cbb3792ecc0146b41d4794ab3bda37

commit a09034d561cbb3792ecc0146b41d4794ab3bda37
Author:     Barbara Skobiej <[email protected]>
AuthorDate: 2025-02-06 16:08:41 +0000
Commit:     Kevin Bowling <[email protected]>
CommitDate: 2026-08-11 20:59:32 +0000

    e1000: fix data type in MAC hash
    
    DPDK commit message
    
    net/e1000/base: fix data type in MAC hash
    
    One of the bit shifts in MAC hash calculation triggers a static analysis
    warning about a potential overflow. Fix the data type to avoid this.
    
    Fixes: af75078fece3 ("first public release")
    Cc: [email protected]
    
    Signed-off-by: Barbara Skobiej <[email protected]>
    Signed-off-by: Anatoly Burakov <[email protected]>
    Acked-by: Bruce Richardson <[email protected]>
    
    Obtained from:  DPDK (458734aaac)
    MFC after:      2 weeks
---
 sys/dev/e1000/e1000_mac.c | 6 ++++--
 sys/dev/e1000/e1000_vf.c  | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/sys/dev/e1000/e1000_mac.c b/sys/dev/e1000/e1000_mac.c
index a34e2c873a0e..eb2c29d153dc 100644
--- a/sys/dev/e1000/e1000_mac.c
+++ b/sys/dev/e1000/e1000_mac.c
@@ -576,8 +576,10 @@ u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr)
 		break;
 	}
 
-	hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) |
-				  (((u16) mc_addr[5]) << bit_shift)));
+	hash_value = (u32)mc_addr[4];
+	hash_value >>= 8 - bit_shift;
+	hash_value |= (u32)mc_addr[5] << bit_shift;
+	hash_value &= hash_mask;
 
 	return hash_value;
 }
diff --git a/sys/dev/e1000/e1000_vf.c b/sys/dev/e1000/e1000_vf.c
index a2c19c980f34..70c5f23fea0b 100644
--- a/sys/dev/e1000/e1000_vf.c
+++ b/sys/dev/e1000/e1000_vf.c
@@ -373,8 +373,10 @@ static u32 e1000_hash_mc_addr_vf(struct e1000_hw *hw, u8 *mc_addr)
 	while (bit_shift < 4 && hash_mask >> bit_shift != 0xFF)
 		bit_shift++;
 
-	hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) |
-				  (((u16) mc_addr[5]) << bit_shift)));
+	hash_value = (u32)mc_addr[4];
+	hash_value >>= 8 - bit_shift;
+	hash_value |= (u32)mc_addr[5] << bit_shift;
+	hash_value &= hash_mask;
 
 	return hash_value;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.