[openwrt/openwrt] mac80211: fix MAC address allocations when local bit set on base addr

LEDE Commits lede-commits at lists.infradead.org
Tue Dec 22 13:13:21 EST 2020


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/39c8bc4422f0404af5b85c10eeb2c4098d919cdb

commit 39c8bc4422f0404af5b85c10eeb2c4098d919cdb
Author: Paul Fertser <fercerpav at gmail.com>
AuthorDate: Fri Oct 16 23:24:19 2020 +0300

    mac80211: fix MAC address allocations when local bit set on base addr
    
    Testing with hwsim reveals two problems:
    
    1. phyX/addresses has two addresses and mac80211_get_addr keeps
    returning the last one when asked for more;
    
    2. The base address has the local bit set and the operation unsets it.
    
    Fix both.
    
    Fixes: 866790fd827cb0187353cdf484eb46a9b38fb6ba
    Reported-by: Zero_Chaos
    Signed-off-by: Paul Fertser <fercerpav at gmail.com>
---
 package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
index 6ca12084cf..e12a804271 100644
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -409,7 +409,7 @@ mac80211_generate_mac() {
 	[ "$mask" = "00:00:00:00:00:00" ] && {
 		mask="ff:ff:ff:ff:ff:ff";
 
-		[ "$(wc -l < /sys/class/ieee80211/${phy}/addresses)" -gt 1 ] && {
+		[ "$(wc -l < /sys/class/ieee80211/${phy}/addresses)" -gt $id ] && {
 			addr="$(mac80211_get_addr "$phy" "$id")"
 			[ -n "$addr" ] && {
 				echo "$addr"
@@ -429,7 +429,7 @@ mac80211_generate_mac() {
 	[ "$((0x$mask1))" -gt 0 ] && {
 		b1="0x$1"
 		[ "$id" -gt 0 ] && \
-			b1=$(($b1 ^ ((($id - !($b1 & 2)) << 2) | 0x2)))
+			b1=$(($b1 ^ ((($id - !($b1 & 2)) << 2)) | 0x2))
 		printf "%02x:%s:%s:%s:%s:%s" $b1 $2 $3 $4 $5 $6
 		return
 	}



More information about the lede-commits mailing list