Merge "ConnectivityService: safer locking" into oc-dev

am: 6120db5990

Change-Id: I1c22edc7a247d83d860e7016fe7edab1537c5bb7
This commit is contained in:
Sudheer Shanka
2017-04-06 20:07:00 +00:00
committed by android-build-merger

View File

@@ -1261,13 +1261,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
@Override
public LinkProperties getLinkProperties(Network network) {
enforceAccessPermission();
NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
if (nai != null) {
synchronized (nai) {
return new LinkProperties(nai.linkProperties);
}
return getLinkProperties(getNetworkAgentInfoForNetwork(network));
}
private LinkProperties getLinkProperties(NetworkAgentInfo nai) {
if (nai == null) {
return null;
}
synchronized (nai) {
return new LinkProperties(nai.linkProperties);
}
return null;
}
private NetworkCapabilities getNetworkCapabilitiesInternal(NetworkAgentInfo nai) {
@@ -3017,7 +3020,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
enforceAccessPermission();
enforceInternetPermission();
NetworkAgentInfo nai;
// TODO: execute this logic on ConnectivityService handler.
final NetworkAgentInfo nai;
if (network == null) {
nai = getDefaultNetwork();
} else {
@@ -3028,21 +3032,24 @@ public class ConnectivityService extends IConnectivityManager.Stub
return;
}
// Revalidate if the app report does not match our current validated state.
if (hasConnectivity == nai.lastValidated) return;
if (hasConnectivity == nai.lastValidated) {
return;
}
final int uid = Binder.getCallingUid();
if (DBG) {
log("reportNetworkConnectivity(" + nai.network.netId + ", " + hasConnectivity +
") by " + uid);
}
synchronized (nai) {
// Validating a network that has not yet connected could result in a call to
// rematchNetworkAndRequests() which is not meant to work on such networks.
if (!nai.everConnected) return;
if (isNetworkWithLinkPropertiesBlocked(nai.linkProperties, uid, false)) return;
nai.networkMonitor.sendMessage(NetworkMonitor.CMD_FORCE_REEVALUATION, uid);
// Validating a network that has not yet connected could result in a call to
// rematchNetworkAndRequests() which is not meant to work on such networks.
if (!nai.everConnected) {
return;
}
LinkProperties lp = getLinkProperties(nai);
if (isNetworkWithLinkPropertiesBlocked(lp, uid, false)) {
return;
}
nai.networkMonitor.sendMessage(NetworkMonitor.CMD_FORCE_REEVALUATION, uid);
}
private ProxyInfo getDefaultProxy() {