Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06985411 authored by Chalard Jean's avatar Chalard Jean
Browse files

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
parent 69508ee6
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -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);