Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 683b756b authored by xshu's avatar xshu
Browse files

avoid generating reserved local MACs

Avoid generating WifiInfo.DEFAULT_MAC_ADDRESS as a randomized MAC
address since it's being used for another purpose.

Bug: 137796328
Test: atest MacAddressTest
Change-Id: Ia7beef0d0af5d7b39845e662cd343d81aef97702
parent 3876ca9d
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.net.wifi.WifiInfo;
import android.os.Parcel;
import android.os.Parcelable;

@@ -364,7 +365,12 @@ public final class MacAddress implements Parcelable {
        long addr = r.nextLong() & VALID_LONG_MASK;
        addr |= LOCALLY_ASSIGNED_MASK;
        addr &= ~MULTICAST_MASK;
        return new MacAddress(addr);
        MacAddress mac = new MacAddress(addr);
        // WifiInfo.DEFAULT_MAC_ADDRESS is being used for another purpose, so do not use it here.
        if (mac.toString().equals(WifiInfo.DEFAULT_MAC_ADDRESS)) {
            return createRandomUnicastAddress();
        }
        return mac;
    }

    /**
@@ -383,7 +389,12 @@ public final class MacAddress implements Parcelable {
        long addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
        addr |= LOCALLY_ASSIGNED_MASK;
        addr &= ~MULTICAST_MASK;
        return new MacAddress(addr);
        MacAddress mac = new MacAddress(addr);
        // WifiInfo.DEFAULT_MAC_ADDRESS is being used for another purpose, so do not use it here.
        if (mac.toString().equals(WifiInfo.DEFAULT_MAC_ADDRESS)) {
            return createRandomUnicastAddress(base, r);
        }
        return mac;
    }

    // Convenience function for working around the lack of byte literals.