From 92f61910b2b2615d6a062366dc365a5f3597468d Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Fri, 7 Jun 2019 11:26:12 -0700 Subject: WifiConfigStore: Add wtf for any data integrity failure Add WTF for any genuine data integrity failures. This will help better track such occurences on production devices. Bug: 132118608 Test: None Change-Id: Ic5e2fa1cad494c508047adf4a1f4175ddb17d6e1 --- service/java/com/android/server/wifi/WifiConfigStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java index c7e75a5c4..a618eb5b5 100644 --- a/service/java/com/android/server/wifi/WifiConfigStore.java +++ b/service/java/com/android/server/wifi/WifiConfigStore.java @@ -693,7 +693,7 @@ public class WifiConfigStore { bytes = mAtomicFile.readFully(); // Check that the file has not been altered since last writeBufferedRawData() if (!mDataIntegrityChecker.isOk(bytes)) { - Log.e(TAG, "Data integrity problem with file: " + mFileName); + Log.wtf(TAG, "Data integrity problem with file: " + mFileName); return null; } } catch (FileNotFoundException e) { -- cgit v1.2.3 From 5574a79d435528ded31153e07c24acd25127c703 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Fri, 7 Jun 2019 11:27:34 -0700 Subject: WifiNetworkFactory: Reject requests for internet with specifier Reject any NetworkRequest with WifiNetworkSpecifier attached and has INTERNET capability set. This will otherwise trigger an unwanted connection which will be torn down by connectivity service immediately (because WifiNetworkAgent will not have INTERNET capability & hence will never match the app's request). Bug: 134735892 Test: atest com.android.server.wifi Test: act.py -c wifi_manager_cross.config -tb dut-name -tc WifiNetworkRequestTest Test: CtsVerifier tests Change-Id: Ia9932379825cec7777baf92e058cd04d181ffc0b --- .../android/server/wifi/WifiNetworkFactory.java | 28 +++++++++++++----- .../server/wifi/WifiNetworkFactoryTest.java | 33 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 65d78e6aa..ecc1a9f18 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -478,6 +478,23 @@ public class WifiNetworkFactory extends NetworkFactory { return false; } + boolean isRequestWithNetworkSpecifierValid(NetworkRequest networkRequest) { + NetworkSpecifier ns = networkRequest.networkCapabilities.getNetworkSpecifier(); + // Invalid network specifier. + if (!(ns instanceof WifiNetworkSpecifier)) { + Log.e(TAG, "Invalid network specifier mentioned. Rejecting"); + return false; + } + // Request cannot have internet capability since such a request can never be fulfilled. + // (NetworkAgent for connection with WifiNetworkSpecifier will not have internet capability) + if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) { + Log.e(TAG, "Request with wifi network specifier cannot contain " + + "NET_CAPABILITY_INTERNET. Rejecting"); + return false; + } + return true; + } + /** * Check whether to accept the new network connection request. * @@ -486,13 +503,11 @@ public class WifiNetworkFactory extends NetworkFactory { @Override public boolean acceptRequest(NetworkRequest networkRequest, int score) { NetworkSpecifier ns = networkRequest.networkCapabilities.getNetworkSpecifier(); - // Generic wifi request. Always accept. if (ns == null) { // Generic wifi request. Always accept. } else { - // Invalid network specifier. - if (!(ns instanceof WifiNetworkSpecifier)) { - Log.e(TAG, "Invalid network specifier mentioned. Rejecting"); + // Invalid request with network specifier. + if (!isRequestWithNetworkSpecifierValid(networkRequest)) { releaseRequestAsUnfulfillableByAnyFactory(networkRequest); return false; } @@ -569,9 +584,8 @@ public class WifiNetworkFactory extends NetworkFactory { mWifiConnectivityManager.setTrustedConnectionAllowed(true); } } else { - // Invalid network specifier. - if (!(ns instanceof WifiNetworkSpecifier)) { - Log.e(TAG, "Invalid network specifier mentioned. Rejecting"); + // Invalid request with network specifier. + if (!isRequestWithNetworkSpecifierValid(networkRequest)) { releaseRequestAsUnfulfillableByAnyFactory(networkRequest); return; } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java index 118b96245..d4e6594c8 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java @@ -278,6 +278,24 @@ public class WifiNetworkFactoryTest { verifyUnfullfillableDispatched(mConnectivityMessenger); } + /** + * Validates handling of acceptNetwork with a network specifier with internet capability. + */ + @Test + public void testHandleAcceptNetworkRequestFromWithInternetCapability() throws Exception { + when(mActivityManager.getPackageImportance(TEST_PACKAGE_NAME_1)) + .thenReturn(IMPORTANCE_FOREGROUND); + + WifiNetworkSpecifier specifier = createWifiNetworkSpecifier(TEST_UID_1, false); + mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier); + mNetworkRequest.networkCapabilities.addCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET); + + assertFalse(mWifiNetworkFactory.acceptRequest(mNetworkRequest, 0)); + mLooper.dispatchAll(); + verifyUnfullfillableDispatched(mConnectivityMessenger); + } + /** * Validates handling of acceptNetwork with a network specifier from a non foreground * app/service. @@ -498,6 +516,21 @@ public class WifiNetworkFactoryTest { verify(mWifiMetrics).incrementNetworkRequestApiNumRequest(); } + /** + * Validates handling of new network request with network specifier with internet capability. + */ + @Test + public void testHandleNetworkRequestWithSpecifierAndInternetCapability() throws Exception { + WifiNetworkSpecifier specifier = createWifiNetworkSpecifier(TEST_UID_1, false); + mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier); + mNetworkRequest.networkCapabilities.addCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET); + + mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0); + mLooper.dispatchAll(); + verifyUnfullfillableDispatched(mConnectivityMessenger); + } + /** * Verify handling of new network request with network specifier for a hidden network. */ -- cgit v1.2.3