From 26364f1dea5f244f87d39615438266ef7eb3f28f Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Sun, 20 Aug 2017 11:54:57 +0900 Subject: [PATCH] Fix transitioning between non-accept strict policies. https://android-review.googlesource.com/438278/ attempted to fix changing between two non-accept StrictMode policies (which is not supported by netd) by ensuring that if neither the old nor the new policy were accept, we'd first set an accept policy. Unfortunately, while this is what the comment says, what the code actually does is send the new policy twice. Fix the code to match the comment and the intent of the CL. While I'm at it, also move applyUidCleartextNetworkPolicy into the synchronized block, so multiple concurrent calls to setUidCleartextNetworkPolicy don't result in NMS state going out of sync with netd state. Bug: 28362720 Test: builds Change-Id: I8d876ba0786c4d6325d26a84378fc6afcf47ab84 --- .../java/com/android/server/NetworkManagementService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 643ccc13f1cab..9fb85b25527dc 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1797,12 +1797,14 @@ public class NetworkManagementService extends INetworkManagementService.Stub // netd does not keep state on strict mode policies, and cannot replace a non-accept // policy without deleting it first. Rather than add state to netd, just always send // it an accept policy when switching between two non-accept policies. + // TODO: consider keeping state in netd so we can simplify this code. if (oldPolicy != StrictMode.NETWORK_POLICY_ACCEPT && policy != StrictMode.NETWORK_POLICY_ACCEPT) { - applyUidCleartextNetworkPolicy(uid, policy); + applyUidCleartextNetworkPolicy(uid, StrictMode.NETWORK_POLICY_ACCEPT); } + + applyUidCleartextNetworkPolicy(uid, policy); } - applyUidCleartextNetworkPolicy(uid, policy); } @Override