summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2019-12-12 04:18:20 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2019-12-12 04:18:20 +0000
commit1f475b0322555ec7720b2342d87a375a3f17553f (patch)
tree264653610b7a4d8ff441d32e1c78dd332c4399e0
parentca4ca420dceb9e4d30bf4ed25e7baa70d32ca79b (diff)
parent94a712fed3e4ede3a7773cf958e7a6dc22c098b7 (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.java25
-rw-r--r--tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java24
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);
+ }
}