From 70fa2b2c27fbbc10d94acc5d1256fe991c51bedd Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Wed, 2 Dec 2020 12:16:56 -0800 Subject: [PATCH] Allow the System UID to unregister ConnDiags CBs. This CL updates ConnectivityService to allow the System's UID to unregister ConnectivityDiagnostics callbacks. Preivously, only the registrant was allowed to unregister them - this caused problems for callbacks that were attempted to be unregistered via binderDied() when the registrant app dies. Bug: 159912975 Bug: 174713659 Test: manually verified Change-Id: I20d0cad5f902708d366aa703c2893b0ea3e55052 --- .../core/java/com/android/server/ConnectivityService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index f7de5c023b..da257beec5 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -8092,8 +8092,10 @@ public class ConnectivityService extends IConnectivityManager.Stub final NetworkRequestInfo nri = cbInfo.mRequestInfo; - if (uid != nri.mUid) { - if (VDBG) loge("Different uid than registrant attempting to unregister cb"); + // Caller's UID must either be the registrants (if they are unregistering) or the System's + // (if the Binder died) + if (uid != nri.mUid && uid != Process.SYSTEM_UID) { + if (DBG) loge("Uid(" + uid + ") not registrant's (" + nri.mUid + ") or System's"); return; }