Fix a bug where UID ranges would not be removed
When a new preferences object is sent that no longer contains a particular app, a new set of requests will be generated. All requests corresponding to that app will be unregistered, and no new ones will be filed since the preferences no longer contain that app. The place where the UID ranges are removed however is in makeDefaultForApps(), which takes a request. As there no longer is a default request for this app, makeDefaultForApps() will never be called with a request for it, and the UID ranges will never be removed. This change applies an emergency fix with some side effects when setting a new preference. This is acceptable, but should ideally be fixed ; see TODO in the code for details. Test: FrameworksNetTests Test: TODO : Need a unit test for this Change-Id: Iac3f55af5d00d174460e1d4cdd31f581835dbaa6
This commit is contained in:
@@ -3831,7 +3831,24 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
removeListenRequestFromNetworks(req);
|
||||
}
|
||||
}
|
||||
mDefaultNetworkRequests.remove(nri);
|
||||
if (mDefaultNetworkRequests.remove(nri)) {
|
||||
// If this request was one of the defaults, then the UID rules need to be updated
|
||||
// WARNING : if the app(s) for which this network request is the default are doing
|
||||
// traffic, this will kill their connected sockets, even if an equivalent request
|
||||
// is going to be reinstated right away ; unconnected traffic will go on the default
|
||||
// until the new default is set, which will happen very soon.
|
||||
// TODO : The only way out of this is to diff old defaults and new defaults, and only
|
||||
// remove ranges for those requests that won't have a replacement
|
||||
final NetworkAgentInfo satisfier = nri.getSatisfier();
|
||||
if (null != satisfier) {
|
||||
try {
|
||||
mNetd.networkRemoveUidRanges(satisfier.network.getNetId(),
|
||||
toUidRangeStableParcels(nri.getUids()));
|
||||
} catch (RemoteException e) {
|
||||
loge("Exception setting network preference default network", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
mNetworkRequestCounter.decrementCount(nri.mUid);
|
||||
mNetworkRequestInfoLogs.log("RELEASE " + nri);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user