Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c4090fd authored by Junyu Lai's avatar Junyu Lai
Browse files

[MS26.1] Remove Process.NETWORK_STACK_UID dependency

Check NetworkStack permission instead.

Test: NetworkStatsAccessTest
Bug: 204830222
Change-Id: I052a1422d145af533b036b0f017ace485b67cbfe
parent 790c02d7
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;
package android.net;


import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
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.NetworkStats.UID_ALL;
import static android.net.TrafficStats.UID_REMOVED;
import static android.net.TrafficStats.UID_REMOVED;
import static android.net.TrafficStats.UID_TETHERING;
import static android.net.TrafficStats.UID_TETHERING;
@@ -106,7 +107,7 @@ public final class NetworkStatsAccess {


    /** Returns the {@link NetworkStatsAccess.Level} for the given caller. */
    /** Returns the {@link NetworkStatsAccess.Level} for the given caller. */
    public static @NetworkStatsAccess.Level int checkAccessLevel(
    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 DevicePolicyManager mDpm = context.getSystemService(DevicePolicyManager.class);
        final TelephonyManager tm = (TelephonyManager)
        final TelephonyManager tm = (TelephonyManager)
                context.getSystemService(Context.TELEPHONY_SERVICE);
                context.getSystemService(Context.TELEPHONY_SERVICE);
@@ -123,8 +124,12 @@ public final class NetworkStatsAccess {
        final boolean isDeviceOwner = mDpm != null && mDpm.isDeviceOwnerApp(callingPackage);
        final boolean isDeviceOwner = mDpm != null && mDpm.isDeviceOwnerApp(callingPackage);
        final int appId = UserHandle.getAppId(callingUid);
        final int appId = UserHandle.getAppId(callingUid);


        final boolean isNetworkStack = context.checkPermission(
                android.Manifest.permission.NETWORK_STACK, callingPid, callingUid)
                == PERMISSION_GRANTED;

        if (hasCarrierPrivileges || isDeviceOwner
        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
            // Carrier-privileged apps and device owners, and the system (including the
            // network stack) can access data usage for all apps on the device.
            // network stack) can access data usage for all apps on the device.
            return NetworkStatsAccess.Level.DEVICE;
            return NetworkStatsAccess.Level.DEVICE;
+1 −1
Original line number Original line Diff line number Diff line
@@ -811,7 +811,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {


    private @NetworkStatsAccess.Level int checkAccessLevel(String callingPackage) {
    private @NetworkStatsAccess.Level int checkAccessLevel(String callingPackage) {
        return NetworkStatsAccess.checkAccessLevel(
        return NetworkStatsAccess.checkAccessLevel(
                mContext, Binder.getCallingUid(), callingPackage);
                mContext, Binder.getCallingPid(), Binder.getCallingUid(), callingPackage);
    }
    }


    /**
    /**