Propagate changes when uids are added or removed to the restricted
background whitelist.
BUG: 26451391
Change-Id: I21eb4959d9f60e83ef96d8d7d1c92e38ddeb2b78
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 544f255..192431c 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -1689,6 +1689,7 @@
}
writePolicy = true;
}
+ updateRulesForGlobalChangeLocked(true);
// Remove associated UID policies
int[] uids = new int[0];
@@ -1862,8 +1863,8 @@
Slog.i(TAG, "adding uid " + uid + " to restrict background whitelist");
synchronized (mRulesLock) {
mRestrictBackgroundWhitelistUids.append(uid, true);
+ updateRulesForGlobalChangeLocked(true);
writePolicyLocked();
- // TODO: call other update methods like updateNetworkRulesLocked?
}
mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED, uid, 0).sendToTarget();
}
@@ -1878,9 +1879,10 @@
mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED, uid, 0).sendToTarget();
}
- private void removeRestrictBackgroundWhitelistedUidLocked(int uid, boolean writePolicy) {
+ private void removeRestrictBackgroundWhitelistedUidLocked(int uid, boolean updateNow) {
mRestrictBackgroundWhitelistUids.delete(uid);
- if (writePolicy) {
+ if (updateNow) {
+ updateRulesForGlobalChangeLocked(true);
writePolicyLocked();
}
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
index 5830b0e..50839e9 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerShellCommand.java
@@ -196,7 +196,12 @@
if (uid < 0) {
return uid;
}
- mInterface.addRestrictBackgroundWhitelistedUid(uid);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mInterface.addRestrictBackgroundWhitelistedUid(uid);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
return 0;
}
@@ -205,7 +210,12 @@
if (uid < 0) {
return uid;
}
- mInterface.removeRestrictBackgroundWhitelistedUid(uid);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mInterface.removeRestrictBackgroundWhitelistedUid(uid);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
return 0;
}