From efbfd7f6aeabdae14fb1a64bcc163e8c8ca48c99 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Thu, 1 Apr 2021 16:41:04 +0900 Subject: [PATCH] Fix broken testCaptivePortalApp This was broken by aosp/1657763, only on eng builds because of a wtf. The root cause of the issue is that the test is acquiring MAINLINE_NETWORK_STACK after it registers a callback but before in unregisters it. After aosp/1657763, the objects keeping track of callbacks are separate for processes with and without MAINLINE_NETWORK_STACK, which means the removal is looked up in a different counter. Solve this by having the NRI remember the relevant counter keeping track of it. Bug: none Test: testCaptivePortalApp Change-Id: I566a28522fa68be9cc2bdb4624b588b4f01d3b7e --- .../android/server/ConnectivityService.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 70c9fe7f3a..150e71cb22 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4034,7 +4034,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } } } - decrementRequestCount(nri); + nri.decrementRequestCount(); mNetworkRequestInfoLogs.log("RELEASE " + nri); if (null != nri.getActiveRequest()) { @@ -4151,14 +4151,6 @@ public class ConnectivityService extends IConnectivityManager.Stub ? mSystemNetworkRequestCounter : mNetworkRequestCounter; } - private void incrementRequestCountOrThrow(NetworkRequestInfo nri) { - getRequestCounter(nri).incrementCountOrThrow(nri.mUid); - } - - private void decrementRequestCount(NetworkRequestInfo nri) { - getRequestCounter(nri).decrementCount(nri.mUid); - } - @Override public void setAcceptUnvalidated(Network network, boolean accept, boolean always) { enforceNetworkStackSettingsOrSetup(); @@ -5457,6 +5449,9 @@ public class ConnectivityService extends IConnectivityManager.Stub @Nullable final String mCallingAttributionTag; + // Counter keeping track of this NRI. + final PerUidCounter mPerUidCounter; + // Effective UID of this request. This is different from mUid when a privileged process // files a request on behalf of another UID. This UID is used to determine blocked status, // UID matching, and so on. mUid above is used for permission checks and to enforce the @@ -5507,7 +5502,8 @@ public class ConnectivityService extends IConnectivityManager.Stub mPid = getCallingPid(); mUid = mDeps.getCallingUid(); mAsUid = asUid; - incrementRequestCountOrThrow(this); + mPerUidCounter = getRequestCounter(this); + mPerUidCounter.incrementCountOrThrow(mUid); /** * Location sensitive data not included in pending intent. Only included in * {@link NetworkCallback}. @@ -5539,7 +5535,8 @@ public class ConnectivityService extends IConnectivityManager.Stub mUid = mDeps.getCallingUid(); mAsUid = asUid; mPendingIntent = null; - incrementRequestCountOrThrow(this); + mPerUidCounter = getRequestCounter(this); + mPerUidCounter.incrementCountOrThrow(mUid); mCallbackFlags = callbackFlags; mCallingAttributionTag = callingAttributionTag; linkDeathRecipient(); @@ -5577,7 +5574,8 @@ public class ConnectivityService extends IConnectivityManager.Stub mUid = nri.mUid; mAsUid = nri.mAsUid; mPendingIntent = nri.mPendingIntent; - incrementRequestCountOrThrow(this); + mPerUidCounter = getRequestCounter(this); + mPerUidCounter.incrementCountOrThrow(mUid); mCallbackFlags = nri.mCallbackFlags; mCallingAttributionTag = nri.mCallingAttributionTag; linkDeathRecipient(); @@ -5609,6 +5607,10 @@ public class ConnectivityService extends IConnectivityManager.Stub return Collections.unmodifiableList(tempRequests); } + void decrementRequestCount() { + mPerUidCounter.decrementCount(mUid); + } + void linkDeathRecipient() { if (null != mBinder) { try { @@ -8773,7 +8775,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // Decrement the reference count for this NetworkRequestInfo. The reference count is // incremented when the NetworkRequestInfo is created as part of // enforceRequestCountLimit(). - decrementRequestCount(nri); + nri.decrementRequestCount(); return; } @@ -8839,7 +8841,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // Decrement the reference count for this NetworkRequestInfo. The reference count is // incremented when the NetworkRequestInfo is created as part of // enforceRequestCountLimit(). - decrementRequestCount(nri); + nri.decrementRequestCount(); iCb.unlinkToDeath(cbInfo, 0); }