[SP20] Check signature permission when accessing network stats provider
Currently, registerNetworkStatsProvider requires the
UPDATE_DEVICE_STATS permission. This is a privileged permission
so it can be granted to preinstalled apps. Thus, apps like
GmsCore, or preinstalled apps will be able to update network stats.
This change checks for a new permission that would only allow
signature apps to declare that. Also check
MAINLINE_NETWORK_STACK permission to allow NetworkStack process
to use it.
Test: adb shell dumpsys netstats
Test: atest FrameworksNetTests
Bug: 149652079
Change-Id: Iaecbf10a7610461bd52e315659006c7332c416e6
Merged-In: Iaecbf10a7610461bd52e315659006c7332c416e6
Merged-In: Idfebd0a1988c3dcfd812d87e30f6a2034d6fbf6b
(cherry picked from commit e9e8d8f9ff)
This commit is contained in:
committed by
Junyu Lai
parent
031f0212f1
commit
af8d85fa0c
@@ -148,6 +148,7 @@ package android {
|
||||
field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
|
||||
field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP";
|
||||
field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
|
||||
field public static final String NETWORK_STATS_PROVIDER = "android.permission.NETWORK_STATS_PROVIDER";
|
||||
field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
|
||||
field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
|
||||
field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
|
||||
@@ -1410,7 +1411,7 @@ package android.app.usage {
|
||||
}
|
||||
|
||||
public class NetworkStatsManager {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.net.netstats.provider.NetworkStatsProviderCallback registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.AbstractNetworkStatsProvider);
|
||||
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.netstats.provider.NetworkStatsProviderCallback registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.AbstractNetworkStatsProvider);
|
||||
}
|
||||
|
||||
public static final class UsageEvents.Event {
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.net.ConnectivityManager;
|
||||
import android.net.DataUsageRequest;
|
||||
import android.net.INetworkStatsService;
|
||||
import android.net.NetworkIdentity;
|
||||
import android.net.NetworkStack;
|
||||
import android.net.NetworkTemplate;
|
||||
import android.net.netstats.provider.AbstractNetworkStatsProvider;
|
||||
import android.net.netstats.provider.NetworkStatsProviderCallback;
|
||||
@@ -540,7 +541,9 @@ public class NetworkStatsManager {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS)
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.NETWORK_STATS_PROVIDER,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK})
|
||||
@NonNull public NetworkStatsProviderCallback registerNetworkStatsProvider(
|
||||
@NonNull String tag,
|
||||
@NonNull AbstractNetworkStatsProvider provider) {
|
||||
|
||||
@@ -1689,6 +1689,10 @@
|
||||
<permission android:name="android.permission.NETWORK_FACTORY"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<!-- @SystemApi @hide Allows applications to access network stats provider -->
|
||||
<permission android:name="android.permission.NETWORK_STATS_PROVIDER"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<!-- Allows Settings and SystemUI to call methods in Networking services
|
||||
<p>Not for use by third-party or privileged applications.
|
||||
@SystemApi @TestApi
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.net;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_NETWORK_STATE;
|
||||
import static android.Manifest.permission.NETWORK_STATS_PROVIDER;
|
||||
import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
|
||||
import static android.Manifest.permission.UPDATE_DEVICE_STATS;
|
||||
import static android.content.Intent.ACTION_SHUTDOWN;
|
||||
@@ -1828,7 +1829,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
||||
*/
|
||||
public @NonNull INetworkStatsProviderCallback registerNetworkStatsProvider(
|
||||
@NonNull String tag, @NonNull INetworkStatsProvider provider) {
|
||||
mContext.enforceCallingOrSelfPermission(UPDATE_DEVICE_STATS, TAG);
|
||||
enforceAnyPermissionOf(NETWORK_STATS_PROVIDER,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
Objects.requireNonNull(provider, "provider is null");
|
||||
Objects.requireNonNull(tag, "tag is null");
|
||||
try {
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
<uses-permission android:name="android.permission.NETWORK_STACK" />
|
||||
<uses-permission android:name="android.permission.OBSERVE_NETWORK_POLICY" />
|
||||
<uses-permission android:name="android.permission.NETWORK_FACTORY" />
|
||||
<uses-permission android:name="android.permission.NETWORK_STATS_PROVIDER" />
|
||||
|
||||
<application>
|
||||
<uses-library android:name="android.test.runner" />
|
||||
|
||||
Reference in New Issue
Block a user