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
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 1703bd5..69350b2 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -4641,7 +4641,8 @@
// 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 @@
synchronized (nai) {
nai.linkProperties = newLp;
}
- // msg.obj is already a defensive copy.
- nai.linkProperties.ensureDirectlyConnectedRoutes();
if (nai.everConnected) {
updateLinkProperties(nai, oldLp);
}