From a7d4766d0d02de38c9a44f9a3549cd5c64dd7689 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Sun, 6 Feb 2022 18:16:04 +0900 Subject: [PATCH] Update the UIDs only after the native network is created UIDs can't be sent to netd until the native network is created. Also, it's possible that the interface disappears at any moment, so in that case catch the ServiceSpecificException. Test: FrameworksNetTests Bug: 218100554 Change-Id: I79285166acf5d89aa34107e00dfff963ccc22d52 --- .../android/server/ConnectivityService.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 198190a545..d833bc2f0c 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -7043,7 +7043,7 @@ public class ConnectivityService extends IConnectivityManager.Stub nai.notifyRegistered(); NetworkInfo networkInfo = nai.networkInfo; updateNetworkInfo(nai, networkInfo); - updateUids(nai, null, nai.networkCapabilities); + updateVpnUids(nai, null, nai.networkCapabilities); } private class NetworkOfferInfo implements IBinder.DeathRecipient { @@ -7679,7 +7679,8 @@ public class ConnectivityService extends IConnectivityManager.Stub updateNetworkPermissions(nai, newNc); final NetworkCapabilities prevNc = nai.getAndSetNetworkCapabilities(newNc); - updateUids(nai, prevNc, newNc); + updateVpnUids(nai, prevNc, newNc); + updateAccessUids(nai, prevNc, newNc); nai.updateScoreForNetworkAgentUpdate(); if (nai.getCurrentScore() == oldScore && newNc.equalRequestableCapabilities(prevNc)) { @@ -7849,12 +7850,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - private void updateUids(@NonNull NetworkAgentInfo nai, @Nullable NetworkCapabilities prevNc, - @Nullable NetworkCapabilities newNc) { - updateVpnUids(nai, prevNc, newNc); - updateAccessUids(nai, prevNc, newNc); - } - private void updateVpnUids(@NonNull NetworkAgentInfo nai, @Nullable NetworkCapabilities prevNc, @Nullable NetworkCapabilities newNc) { Set prevRanges = null == prevNc ? null : prevNc.getUidRanges(); @@ -7911,7 +7906,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } } catch (Exception e) { // Never crash! - loge("Exception in updateUids: ", e); + loge("Exception in updateVpnUids: ", e); } } @@ -7950,6 +7945,9 @@ public class ConnectivityService extends IConnectivityManager.Stub intsToUidRangeStableParcels(toRemove), PREFERENCE_ORDER_IRRELEVANT_BECAUSE_NOT_DEFAULT)); } + } catch (ServiceSpecificException e) { + // Has the interface disappeared since the network was builtĀ ? + Log.i(TAG, "Can't set access UIDs for network " + nai.network, e); } catch (RemoteException e) { // Netd died. This usually causes a runtime restart anyway. } @@ -8864,6 +8862,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } networkAgent.created = true; networkAgent.onNetworkCreated(); + updateAccessUids(networkAgent, null, networkAgent.networkCapabilities); } if (!networkAgent.everConnected && state == NetworkInfo.State.CONNECTED) { @@ -8917,7 +8916,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } else if (state == NetworkInfo.State.DISCONNECTED) { networkAgent.disconnect(); if (networkAgent.isVPN()) { - updateUids(networkAgent, networkAgent.networkCapabilities, null); + updateVpnUids(networkAgent, networkAgent.networkCapabilities, null); } disconnectAndDestroyNetwork(networkAgent); if (networkAgent.isVPN()) {