From a00833349c61aa968f75d30cd7f0b53c82a58a9f Mon Sep 17 00:00:00 2001 From: lesl Date: Wed, 24 Jun 2020 14:35:21 +0800 Subject: [PATCH] wifi: Check multicast mac address when setting SAP bssid Bug: 159589542 Test: atest frameworks/base/wifi/tests/ Test: atest FrameworksWifiTests Change-Id: I53cdd2856b2f013a3d572048301f398086a2c709 --- .../android/net/wifi/SoftApConfiguration.java | 9 ++++++--- .../net/wifi/SoftApConfigurationTest.java | 20 +++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/wifi/java/android/net/wifi/SoftApConfiguration.java b/wifi/java/android/net/wifi/SoftApConfiguration.java index 68c35d3061b06..374a3f3922908 100644 --- a/wifi/java/android/net/wifi/SoftApConfiguration.java +++ b/wifi/java/android/net/wifi/SoftApConfiguration.java @@ -724,14 +724,17 @@ public final class SoftApConfiguration implements Parcelable { * @param bssid BSSID, or null to have the BSSID chosen by the framework. The caller is * responsible for avoiding collisions. * @return Builder for chaining. - * @throws IllegalArgumentException when the given BSSID is the all-zero or broadcast MAC - * address. + * @throws IllegalArgumentException when the given BSSID is the all-zero + * , multicast or broadcast MAC address. */ @NonNull public Builder setBssid(@Nullable MacAddress bssid) { if (bssid != null) { Preconditions.checkArgument(!bssid.equals(WifiManager.ALL_ZEROS_MAC_ADDRESS)); - Preconditions.checkArgument(!bssid.equals(MacAddress.BROADCAST_ADDRESS)); + if (bssid.getAddressType() != MacAddress.TYPE_UNICAST) { + throw new IllegalArgumentException("bssid doesn't support " + + "multicast or broadcast mac address"); + } } mBssid = bssid; return this; diff --git a/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java b/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java index 40f5c3ed8e5eb..c2d0d6d81e84f 100644 --- a/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java +++ b/wifi/tests/src/android/net/wifi/SoftApConfigurationTest.java @@ -35,6 +35,7 @@ import java.util.Random; @SmallTest public class SoftApConfigurationTest { private static final String TEST_CHAR_SET_AS_STRING = "abcdefghijklmnopqrstuvwxyz0123456789"; + private static final String TEST_BSSID = "aa:22:33:aa:bb:cc"; private SoftApConfiguration parcelUnparcel(SoftApConfiguration configIn) { Parcel parcel = Parcel.obtain(); @@ -67,12 +68,13 @@ public class SoftApConfigurationTest { @Test public void testBasicSettings() { + MacAddress testBssid = MacAddress.fromString(TEST_BSSID); SoftApConfiguration original = new SoftApConfiguration.Builder() .setSsid("ssid") - .setBssid(MacAddress.fromString("11:22:33:44:55:66")) + .setBssid(testBssid) .build(); assertThat(original.getSsid()).isEqualTo("ssid"); - assertThat(original.getBssid()).isEqualTo(MacAddress.fromString("11:22:33:44:55:66")); + assertThat(original.getBssid()).isEqualTo(testBssid); assertThat(original.getPassphrase()).isNull(); assertThat(original.getSecurityType()).isEqualTo(SoftApConfiguration.SECURITY_TYPE_OPEN); assertThat(original.getBand()).isEqualTo(SoftApConfiguration.BAND_2GHZ); @@ -220,6 +222,20 @@ public class SoftApConfigurationTest { assertThat(copy.hashCode()).isEqualTo(original.hashCode()); } + @Test(expected = IllegalArgumentException.class) + public void testInvalidBroadcastBssid() { + SoftApConfiguration original = new SoftApConfiguration.Builder() + .setBssid(MacAddress.BROADCAST_ADDRESS) + .build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testInvalidMulticastBssid() { + SoftApConfiguration original = new SoftApConfiguration.Builder() + .setBssid(MacAddress.fromString("01:aa:bb:cc:dd:ee")) + .build(); + } + @Test(expected = IllegalArgumentException.class) public void testInvalidShortPasswordLengthForWpa2() { SoftApConfiguration original = new SoftApConfiguration.Builder()