Merge "Enforce permission check in getUidStats function" into rvc-dev am: 0f3164c79d am: 2fe55ed6d4 am: 6069c195d5 am: 5c47b3410c
Change-Id: Ib264aa6768baf3c4780d8ffc397b0bcf2ad3e159
This commit is contained in:
@@ -775,18 +775,11 @@ public class TrafficStats {
|
||||
* @see android.content.pm.ApplicationInfo#uid
|
||||
*/
|
||||
public static long getUidTxBytes(int uid) {
|
||||
// This isn't actually enforcing any security; it just returns the
|
||||
// unsupported value. The real filtering is done at the kernel level.
|
||||
final int callingUid = android.os.Process.myUid();
|
||||
if (callingUid == android.os.Process.SYSTEM_UID || callingUid == uid) {
|
||||
try {
|
||||
return getStatsService().getUidStats(uid, TYPE_TX_BYTES);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
} else {
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -808,18 +801,11 @@ public class TrafficStats {
|
||||
* @see android.content.pm.ApplicationInfo#uid
|
||||
*/
|
||||
public static long getUidRxBytes(int uid) {
|
||||
// This isn't actually enforcing any security; it just returns the
|
||||
// unsupported value. The real filtering is done at the kernel level.
|
||||
final int callingUid = android.os.Process.myUid();
|
||||
if (callingUid == android.os.Process.SYSTEM_UID || callingUid == uid) {
|
||||
try {
|
||||
return getStatsService().getUidStats(uid, TYPE_RX_BYTES);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
} else {
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -841,18 +827,11 @@ public class TrafficStats {
|
||||
* @see android.content.pm.ApplicationInfo#uid
|
||||
*/
|
||||
public static long getUidTxPackets(int uid) {
|
||||
// This isn't actually enforcing any security; it just returns the
|
||||
// unsupported value. The real filtering is done at the kernel level.
|
||||
final int callingUid = android.os.Process.myUid();
|
||||
if (callingUid == android.os.Process.SYSTEM_UID || callingUid == uid) {
|
||||
try {
|
||||
return getStatsService().getUidStats(uid, TYPE_TX_PACKETS);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
} else {
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -874,18 +853,11 @@ public class TrafficStats {
|
||||
* @see android.content.pm.ApplicationInfo#uid
|
||||
*/
|
||||
public static long getUidRxPackets(int uid) {
|
||||
// This isn't actually enforcing any security; it just returns the
|
||||
// unsupported value. The real filtering is done at the kernel level.
|
||||
final int callingUid = android.os.Process.myUid();
|
||||
if (callingUid == android.os.Process.SYSTEM_UID || callingUid == uid) {
|
||||
try {
|
||||
return getStatsService().getUidStats(uid, TYPE_RX_PACKETS);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
} else {
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -47,6 +47,7 @@ import static android.net.NetworkTemplate.buildTemplateMobileWildcard;
|
||||
import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
|
||||
import static android.net.TrafficStats.KB_IN_BYTES;
|
||||
import static android.net.TrafficStats.MB_IN_BYTES;
|
||||
import static android.net.TrafficStats.UNSUPPORTED;
|
||||
import static android.os.Trace.TRACE_TAG_NETWORK;
|
||||
import static android.provider.Settings.Global.NETSTATS_AUGMENT_ENABLED;
|
||||
import static android.provider.Settings.Global.NETSTATS_COMBINE_SUBTYPE_ENABLED;
|
||||
@@ -1031,6 +1032,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
||||
|
||||
@Override
|
||||
public long getUidStats(int uid, int type) {
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
if (callingUid != android.os.Process.SYSTEM_UID && callingUid != uid) {
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
return nativeGetUidStat(uid, type, checkBpfStatsEnable());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user