Merge "Fix: Firewall: NMS inverts default rule behavior"
This commit is contained in:
@@ -1483,6 +1483,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
|
|||||||
public void setFirewallUidRules(int chain, int[] uids, int[] rules) {
|
public void setFirewallUidRules(int chain, int[] uids, int[] rules) {
|
||||||
enforceSystemUid();
|
enforceSystemUid();
|
||||||
synchronized (mQuotaLock) {
|
synchronized (mQuotaLock) {
|
||||||
|
final int[] applicableUidsForChain;
|
||||||
synchronized (mRulesLock) {
|
synchronized (mRulesLock) {
|
||||||
SparseIntArray uidFirewallRules = getUidFirewallRulesLR(chain);
|
SparseIntArray uidFirewallRules = getUidFirewallRulesLR(chain);
|
||||||
SparseIntArray newRules = new SparseIntArray();
|
SparseIntArray newRules = new SparseIntArray();
|
||||||
@@ -1506,10 +1507,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
|
|||||||
int uid = rulesToRemove.keyAt(index);
|
int uid = rulesToRemove.keyAt(index);
|
||||||
updateFirewallUidRuleLocked(chain, uid, FIREWALL_RULE_DEFAULT);
|
updateFirewallUidRuleLocked(chain, uid, FIREWALL_RULE_DEFAULT);
|
||||||
}
|
}
|
||||||
|
// Copy the keys for the firewall rules chain, which is guaranteed not to include
|
||||||
|
// default rules. We must not include default rules in the UIDs we send to
|
||||||
|
// ConnectivityManager#replaceFirewallChain, as this would have the opposite effect
|
||||||
|
// intended, leading such UIDs to be blocked or allowed erroneously.
|
||||||
|
applicableUidsForChain = uidFirewallRules.copyKeys();
|
||||||
}
|
}
|
||||||
final ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
|
final ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
|
||||||
try {
|
try {
|
||||||
cm.replaceFirewallChain(chain, uids);
|
cm.replaceFirewallChain(chain, applicableUidsForChain);
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
Slog.w(TAG, "Error flushing firewall chain " + chain, e);
|
Slog.w(TAG, "Error flushing firewall chain " + chain, e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user