diff options
author | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2019-12-12 04:18:20 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2019-12-12 04:18:20 +0000 |
commit | 1f475b0322555ec7720b2342d87a375a3f17553f (patch) | |
tree | 264653610b7a4d8ff441d32e1c78dd332c4399e0 | |
parent | ca4ca420dceb9e4d30bf4ed25e7baa70d32ca79b (diff) | |
parent | 94a712fed3e4ede3a7773cf958e7a6dc22c098b7 (diff) |
p2p: validate the network name of a group am: 221cd9e93b am: 94a712fed3
Change-Id: Ib046432bad3b449964aa166eb21c0d392963199c
-rw-r--r-- | service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java | 25 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java | 24 |
2 files changed, 48 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java index 634e3e7b8..b0507ea84 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java @@ -98,6 +98,7 @@ import com.android.wifi.resources.R; import java.io.FileDescriptor; import java.io.PrintWriter; import java.net.InetAddress; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -146,6 +147,11 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { android.Manifest.permission.ACCESS_WIFI_STATE }; + // Maximum number of bytes allowed for a network name, i.e. SSID. + private static final int MAX_NETWORK_NAME_BYTES = 32; + // Minimum number of bytes for a network name, i.e. DIRECT-xy. + private static final int MIN_NETWORK_NAME_BYTES = 9; + // Two minutes comes from the wpa_supplicant setting private static final int GROUP_CREATING_WAIT_TIME_MS = 120 * 1000; private static int sGroupCreatingTimeoutIndex = 0; @@ -3309,6 +3315,23 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { } /** + * Check the network name complies standard SSID naming rules. + * + * The network name of a group is also the broadcasting SSID, + * as a result, the network name must complies standard SSID naming + * rules. + */ + private boolean isValidNetworkName(String networkName) { + if (TextUtils.isEmpty(networkName)) return false; + + byte[] ssidBytes = networkName.getBytes(StandardCharsets.UTF_8); + if (ssidBytes.length < MIN_NETWORK_NAME_BYTES) return false; + if (ssidBytes.length > MAX_NETWORK_NAME_BYTES) return false; + + return true; + } + + /** * A config is valid as a group if it has network name and passphrase. * Supplicant can construct a group on the fly for creating a group with specified config * or join a group without negotiation and WPS. @@ -3318,7 +3341,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { private boolean isConfigValidAsGroup(WifiP2pConfig config) { if (config == null) return false; if (TextUtils.isEmpty(config.deviceAddress)) return false; - if (!TextUtils.isEmpty(config.networkName) + if (isValidNetworkName(config.networkName) && !TextUtils.isEmpty(config.passphrase)) { return true; } diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java index d61c45a38..11b5ef078 100644 --- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java @@ -3925,4 +3925,28 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { mLooper.dispatchAll(); verify(mWifiNative).p2pStopFind(); } + + /** + * Verify a network name which is too long is rejected. + */ + @Test + public void testSendConnectMsgWithTooLongNetworkName() throws Exception { + mTestWifiP2pFastConnectionConfig.networkName = "DIRECT-xy-abcdefghijklmnopqrstuvw"; + sendConnectMsg(mClientMessenger, mTestWifiP2pFastConnectionConfig); + verify(mClientHandler).sendMessage(mMessageCaptor.capture()); + Message message = mMessageCaptor.getValue(); + assertEquals(WifiP2pManager.CONNECT_FAILED, message.what); + } + + /** + * Verify a network name which is too short is rejected. + */ + @Test + public void testSendConnectMsgWithTooShortNetworkName() throws Exception { + mTestWifiP2pFastConnectionConfig.networkName = "DIRECT-x"; + sendConnectMsg(mClientMessenger, mTestWifiP2pFastConnectionConfig); + verify(mClientHandler).sendMessage(mMessageCaptor.capture()); + Message message = mMessageCaptor.getValue(); + assertEquals(WifiP2pManager.CONNECT_FAILED, message.what); + } } |