OSDN Git Service

ServiceManager: Allow system services running as secondary users to add services
authorArve Hjønnevåg <arve@android.com>
Thu, 18 Aug 2016 22:42:35 +0000 (15:42 -0700)
committerArve Hjønnevåg <arve@google.com>
Thu, 18 Aug 2016 23:07:00 +0000 (23:07 +0000)
This should be reverted when all system services have been cleaned up to not
do this. A process looking up a service while running in the background will
see the service registered by the active user (assuming the service is
registered on every user switch), not the service registered by the user that
the process itself belongs to.

BUG: 30795333
Change-Id: I1b74d58be38ed358f43c163692f9e704f8f31dbe

cmds/servicemanager/Android.mk
cmds/servicemanager/service_manager.c

index 155cfc5..5bafd53 100644 (file)
@@ -18,7 +18,7 @@ LOCAL_MODULE_TAGS := optional
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
-LOCAL_SHARED_LIBRARIES := liblog libselinux
+LOCAL_SHARED_LIBRARIES := liblog libcutils libselinux
 LOCAL_SRC_FILES := service_manager.c binder.c
 LOCAL_CFLAGS += $(svc_c_flags)
 LOCAL_MODULE := servicemanager
index 7c343af..e20c13f 100644 (file)
@@ -6,6 +6,8 @@
 #include <errno.h>
 #include <fcntl.h>
 
+#include <cutils/multiuser.h>
+
 #include <private/android_filesystem_config.h>
 
 #include <selinux/android.h>
@@ -111,7 +113,7 @@ static int svc_can_register(const uint16_t *name, size_t name_len, pid_t spid, u
 {
     const char *perm = "add";
 
-    if (uid >= AID_APP) {
+    if (multiuser_get_app_id(uid) >= AID_APP) {
         return 0; /* Don't allow apps to register services */
     }