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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user