From 7c4090fdb5777ddb3110b81cd7f19f271e6de677 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Tue, 28 Dec 2021 09:03:07 +0000 Subject: [PATCH] [MS26.1] Remove Process.NETWORK_STACK_UID dependency Check NetworkStack permission instead. Test: NetworkStatsAccessTest Bug: 204830222 Change-Id: I052a1422d145af533b036b0f017ace485b67cbfe --- .../framework-t/src/android/net/NetworkStatsAccess.java | 9 +++++++-- .../src/com/android/server/net/NetworkStatsService.java | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/ConnectivityT/framework-t/src/android/net/NetworkStatsAccess.java b/packages/ConnectivityT/framework-t/src/android/net/NetworkStatsAccess.java index 591605d952e9..779fdf94a0eb 100644 --- a/packages/ConnectivityT/framework-t/src/android/net/NetworkStatsAccess.java +++ b/packages/ConnectivityT/framework-t/src/android/net/NetworkStatsAccess.java @@ -17,6 +17,7 @@ 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; @@ -106,7 +107,7 @@ public final class NetworkStatsAccess { /** Returns the {@link NetworkStatsAccess.Level} for the given caller. */ public static @NetworkStatsAccess.Level int checkAccessLevel( - Context context, int callingUid, String callingPackage) { + Context context, int callingPid, int callingUid, String callingPackage) { final DevicePolicyManager mDpm = context.getSystemService(DevicePolicyManager.class); final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); @@ -123,8 +124,12 @@ public final class NetworkStatsAccess { final boolean isDeviceOwner = mDpm != null && mDpm.isDeviceOwnerApp(callingPackage); final int appId = UserHandle.getAppId(callingUid); + final boolean isNetworkStack = context.checkPermission( + android.Manifest.permission.NETWORK_STACK, callingPid, callingUid) + == PERMISSION_GRANTED; + if (hasCarrierPrivileges || isDeviceOwner - || appId == Process.SYSTEM_UID || appId == Process.NETWORK_STACK_UID) { + || appId == Process.SYSTEM_UID || isNetworkStack) { // Carrier-privileged apps and device owners, and the system (including the // network stack) can access data usage for all apps on the device. return NetworkStatsAccess.Level.DEVICE; diff --git a/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java b/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java index 2beca73ecd72..748cc27d51f4 100644 --- a/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java +++ b/packages/ConnectivityT/service/src/com/android/server/net/NetworkStatsService.java @@ -811,7 +811,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { private @NetworkStatsAccess.Level int checkAccessLevel(String callingPackage) { return NetworkStatsAccess.checkAccessLevel( - mContext, Binder.getCallingUid(), callingPackage); + mContext, Binder.getCallingPid(), Binder.getCallingUid(), callingPackage); } /**