From efc3c4a547952f6732f7ce8a8793d2134897ea49 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 11 Sep 2017 15:21:10 +0100 Subject: [PATCH] Patch incoming LinkProperties before it's visible to the outside Otherwise we risk a race condition when we are fixing the LinkProperties routes, other parts of ConnectivityService is reading the field at the same time. Test: runtest frameworks-net -c com.android.server.ConnectivityServiceTest Test: runtest frameworks-core -c android.net.LinkPropertiesTest Bug: 65529483 Bug: 35995111 Change-Id: I539578703570a901e0a5dff0155422ca78c52401 --- .../core/java/com/android/server/ConnectivityService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 1703bd55d6..69350b26c7 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4641,7 +4641,8 @@ public class ConnectivityService extends IConnectivityManager.Stub // Ignore updates for disconnected networks return; } - + // newLp is already a defensive copy. + newLp.ensureDirectlyConnectedRoutes(); if (VDBG) { log("Update of LinkProperties for " + nai.name() + "; created=" + nai.created + @@ -4651,8 +4652,6 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (nai) { nai.linkProperties = newLp; } - // msg.obj is already a defensive copy. - nai.linkProperties.ensureDirectlyConnectedRoutes(); if (nai.everConnected) { updateLinkProperties(nai, oldLp); }