Merge "Enforce permission check in getUidStats function" into rvc-dev
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index 8108cf0..e7bba69 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -775,17 +775,10 @@
* @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;
+ try {
+ return getStatsService().getUidStats(uid, TYPE_TX_BYTES);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
}
@@ -808,17 +801,10 @@
* @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;
+ try {
+ return getStatsService().getUidStats(uid, TYPE_RX_BYTES);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
}
@@ -841,17 +827,10 @@
* @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;
+ try {
+ return getStatsService().getUidStats(uid, TYPE_TX_PACKETS);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
}
@@ -874,17 +853,10 @@
* @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;
+ try {
+ return getStatsService().getUidStats(uid, TYPE_RX_PACKETS);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
}
}
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 44173c6..1951fc0 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -47,6 +47,7 @@
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 @@
@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());
}