From e68c42b8887028468cfde97e0b670ce97000fa9d Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Tue, 11 Apr 2023 10:49:49 +0800 Subject: [PATCH] Check MAINLINE_NETWORK_STACK as well to make GTS can access proper stats Follow up from aosp/1933093. The test failed because certain devices use a flattened apex that lacks the NETWORK_STACK permission for sharing with the GTS apk. Additionally, the NetworkStatsAccess does not recognize the GTS apk, which holds the MAINLINE_NETWORK_STACK permission. Test: TH Bug: 275532605 Change-Id: Icce80a3d3dbea4a84fbd369d9b5fbe0029ab463e --- framework-t/src/android/net/NetworkStatsAccess.java | 10 ++++++---- .../unit/java/android/net/NetworkStatsAccessTest.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/framework-t/src/android/net/NetworkStatsAccess.java b/framework-t/src/android/net/NetworkStatsAccess.java index 0585756e7c..23902dc800 100644 --- a/framework-t/src/android/net/NetworkStatsAccess.java +++ b/framework-t/src/android/net/NetworkStatsAccess.java @@ -17,7 +17,6 @@ package android.net; import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY; -import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.net.NetworkStats.UID_ALL; import static android.net.TrafficStats.UID_REMOVED; import static android.net.TrafficStats.UID_TETHERING; @@ -33,6 +32,8 @@ import android.os.Process; import android.os.UserHandle; import android.telephony.TelephonyManager; +import com.android.net.module.util.PermissionUtils; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -100,6 +101,7 @@ public final class NetworkStatsAccess { *
  • Device owners. *
  • Carrier-privileged applications. *
  • The system UID. + *
  • NetworkStack application. * */ int DEVICE = 3; @@ -125,9 +127,9 @@ public final class NetworkStatsAccess { final int appId = UserHandle.getAppId(callingUid); - final boolean isNetworkStack = context.checkPermission( - android.Manifest.permission.NETWORK_STACK, callingPid, callingUid) - == PERMISSION_GRANTED; + final boolean isNetworkStack = PermissionUtils.checkAnyPermissionOf( + context, callingPid, callingUid, android.Manifest.permission.NETWORK_STACK, + NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK); if (hasCarrierPrivileges || isDeviceOwner || appId == Process.SYSTEM_UID || isNetworkStack) { diff --git a/tests/unit/java/android/net/NetworkStatsAccessTest.java b/tests/unit/java/android/net/NetworkStatsAccessTest.java index a74056be1a..8b86211112 100644 --- a/tests/unit/java/android/net/NetworkStatsAccessTest.java +++ b/tests/unit/java/android/net/NetworkStatsAccessTest.java @@ -78,6 +78,7 @@ public class NetworkStatsAccessTest { setHasAppOpsPermission(AppOpsManager.MODE_DEFAULT, false); setHasReadHistoryPermission(false); setHasNetworkStackPermission(false); + setHasMainlineNetworkStackPermission(false); } @After @@ -154,6 +155,10 @@ public class NetworkStatsAccessTest { setHasNetworkStackPermission(false); assertEquals(NetworkStatsAccess.Level.DEFAULT, NetworkStatsAccess.checkAccessLevel(mContext, TEST_PID, TEST_UID, TEST_PKG)); + + setHasMainlineNetworkStackPermission(true); + assertEquals(NetworkStatsAccess.Level.DEVICE, + NetworkStatsAccess.checkAccessLevel(mContext, TEST_PID, TEST_UID, TEST_PKG)); } private void setHasCarrierPrivileges(boolean hasPrivileges) { @@ -189,4 +194,10 @@ public class NetworkStatsAccessTest { TEST_PID, TEST_UID)).thenReturn(hasPermission ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED); } + + private void setHasMainlineNetworkStackPermission(boolean hasPermission) { + when(mContext.checkPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, + TEST_PID, TEST_UID)).thenReturn(hasPermission ? PackageManager.PERMISSION_GRANTED + : PackageManager.PERMISSION_DENIED); + } }