diff options
author | 2025-02-06 16:06:59 -0800 | |
---|---|---|
committer | 2025-02-06 16:06:59 -0800 | |
commit | d2e6d4ad0ef559166200f27f2b3326212653ec65 (patch) | |
tree | 6993c68db8eeae15c0f4c1593a5a09579e3f1964 | |
parent | 80ccf8c490504bf13adc7e5731a60f0646b3046a (diff) | |
parent | 57e446cfdc95fce61be986d98ffc81e8bb70504a (diff) |
Merge "Add size check for IP config" into main
-rw-r--r-- | service/java/com/android/server/wifi/WifiConfigurationUtil.java | 38 | ||||
-rw-r--r-- | service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java | 24 |
2 files changed, 62 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java index 110bc627fd..612b7b4e59 100644 --- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java +++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java @@ -28,6 +28,7 @@ import static com.android.server.wifi.util.NativeUtil.addEnclosingQuotes; import android.annotation.SuppressLint; import android.net.IpConfiguration; import android.net.MacAddress; +import android.net.ProxyInfo; import android.net.StaticIpConfiguration; import android.net.wifi.SecurityParams; import android.net.wifi.WifiConfiguration; @@ -81,6 +82,7 @@ public class WifiConfigurationUtil { private static final int WEP104_KEY_BYTES_LEN = 13; private static final int WEP40_KEY_BYTES_LEN = 5; private static final int MAX_STRING_LENGTH = 512; + private static final int MAX_ENTRY_SIZE = 100; @VisibleForTesting public static final String PASSWORD_MASK = "*"; @@ -732,6 +734,42 @@ public class WifiConfigurationUtil { Log.e(TAG, "validateIpConfiguration failed: null static ip Address"); return false; } + if (staticIpConfig.getDnsServers() != null + && staticIpConfig.getDnsServers().size() > MAX_ENTRY_SIZE) { + Log.e(TAG, "validateIpConfiguration failed: too many DNS server"); + return false; + } + if (staticIpConfig.getDomains() != null + && staticIpConfig.getDomains().length() > MAX_STRING_LENGTH) { + Log.e(TAG, "validateIpConfiguration failed: domain name too long"); + return false; + } + } + ProxyInfo proxyInfo = ipConfig.getHttpProxy(); + if (proxyInfo != null) { + if (!proxyInfo.isValid()) { + Log.e(TAG, "validateIpConfiguration failed: invalid proxy info"); + return false; + } + if (proxyInfo.getHost() != null + && proxyInfo.getHost().length() > MAX_STRING_LENGTH) { + Log.e(TAG, "validateIpConfiguration failed: host name too long"); + return false; + } + if (proxyInfo.getExclusionList() != null) { + if (proxyInfo.getExclusionList().length > MAX_ENTRY_SIZE) { + Log.e(TAG, "validateIpConfiguration failed: too many entry in exclusion list"); + return false; + } + int sum = 0; + for (String s : proxyInfo.getExclusionList()) { + sum += s.length(); + if (sum > MAX_STRING_LENGTH) { + Log.e(TAG, "validateIpConfiguration failed: exclusion list size too large"); + return false; + } + } + } } return true; } diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java index f938371f5e..5aa28c451b 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.withSettings; import android.content.pm.UserInfo; import android.net.IpConfiguration; import android.net.MacAddress; +import android.net.ProxyInfo; import android.net.wifi.ScanResult; import android.net.wifi.SecurityParams; import android.net.wifi.WifiConfiguration; @@ -1684,4 +1685,27 @@ public class WifiConfigurationUtilTest extends WifiBaseTest { assertFalse(WifiConfigurationUtil.validate(pskConfig, SUPPORTED_FEATURES_ALL, WifiConfigurationUtil.VALIDATE_FOR_ADD)); } + + @Test + public void testInvalidStaticIpConfig() { + WifiConfiguration pskConfig = WifiConfigurationTestUtil.createPskNetwork(); + IpConfiguration ipConfig = + WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy(); + ipConfig.getStaticIpConfiguration().domains = "a".repeat(513); + pskConfig.setIpConfiguration(ipConfig); + assertFalse(WifiConfigurationUtil.validate(pskConfig, SUPPORTED_FEATURES_ALL, + WifiConfigurationUtil.VALIDATE_FOR_ADD)); + } + @Test + public void testInvalidProxyInfo() { + WifiConfiguration pskConfig = WifiConfigurationTestUtil.createPskNetwork(); + IpConfiguration ipConfig = + WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy(); + ProxyInfo proxyInfo = ProxyInfo.buildDirectProxy(ipConfig.getHttpProxy().getHost(), + ipConfig.getHttpProxy().getPort(), List.of("a".repeat(513))); + ipConfig.setHttpProxy(proxyInfo); + pskConfig.setIpConfiguration(ipConfig); + assertFalse(WifiConfigurationUtil.validate(pskConfig, SUPPORTED_FEATURES_ALL, + WifiConfigurationUtil.VALIDATE_FOR_ADD)); + } } |