From dc6e640623cf1fe5290ee9ce1cf7d0ecae2cbeb4 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Wed, 27 Mar 2019 15:42:53 +0900 Subject: Fix race when starting NetworkMonitor NetworkMonitor obtained LinkProperties and NetworkCapabilities via synchronous calls to ConnectivityManager after receiving an asynchronous notification, which is prone to races: the network could be gone before the LinkProperties/NetworkCapabilities can be fetched. Fix the race by passing LinkProperties/NetworkCapabilities directly to NetworkMonitor in the asynchronous notifications. Test: atest FrameworksNetTests NetworkStackTests Test: booted, WiFi works Bug: 129375892 Change-Id: I200ac7ca6ff79590b11c9be705f650c92fd3cb63 --- src/com/android/server/NetworkStackService.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/com/android/server/NetworkStackService.java') diff --git a/src/com/android/server/NetworkStackService.java b/src/com/android/server/NetworkStackService.java index 19e9108..63f057c 100644 --- a/src/com/android/server/NetworkStackService.java +++ b/src/com/android/server/NetworkStackService.java @@ -35,7 +35,9 @@ import android.net.INetd; import android.net.INetworkMonitor; import android.net.INetworkMonitorCallbacks; import android.net.INetworkStackConnector; +import android.net.LinkProperties; import android.net.Network; +import android.net.NetworkCapabilities; import android.net.PrivateDnsConfigParcel; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; @@ -307,9 +309,9 @@ public class NetworkStackService extends Service { } @Override - public void notifyNetworkConnected() { + public void notifyNetworkConnected(LinkProperties lp, NetworkCapabilities nc) { checkNetworkStackCallingPermission(); - mNm.notifyNetworkConnected(); + mNm.notifyNetworkConnected(lp, nc); } @Override @@ -319,15 +321,15 @@ public class NetworkStackService extends Service { } @Override - public void notifyLinkPropertiesChanged() { + public void notifyLinkPropertiesChanged(LinkProperties lp) { checkNetworkStackCallingPermission(); - mNm.notifyLinkPropertiesChanged(); + mNm.notifyLinkPropertiesChanged(lp); } @Override - public void notifyNetworkCapabilitiesChanged() { + public void notifyNetworkCapabilitiesChanged(NetworkCapabilities nc) { checkNetworkStackCallingPermission(); - mNm.notifyNetworkCapabilitiesChanged(); + mNm.notifyNetworkCapabilitiesChanged(nc); } } } -- cgit v1.2.3