summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArve Hjønnevåg <arve@android.com>2016-08-18 15:42:35 -0700
committergitbuildkicker <android-build@google.com>2016-08-26 16:21:59 -0700
commit390c2d3512fcbf0f4e1890baef12f3bd1d23dc56 (patch)
tree7990bda700f9b8b6a5236cda5d5036d12776591f
parentdbee7f4650dfb419d12ebaf13e96bc54ae880b99 (diff)
downloadframeworks_native-390c2d3512fcbf0f4e1890baef12f3bd1d23dc56.zip
frameworks_native-390c2d3512fcbf0f4e1890baef12f3bd1d23dc56.tar.gz
frameworks_native-390c2d3512fcbf0f4e1890baef12f3bd1d23dc56.tar.bz2
ServiceManager: Allow system services running as secondary users to add services
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 (cherry picked from commit e6bbe69ba739c8a08837134437aaccfea5f1d943)
-rw-r--r--cmds/servicemanager/Android.mk2
-rw-r--r--cmds/servicemanager/service_manager.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/cmds/servicemanager/Android.mk b/cmds/servicemanager/Android.mk
index 155cfc5..5bafd53 100644
--- a/cmds/servicemanager/Android.mk
+++ b/cmds/servicemanager/Android.mk
@@ -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
diff --git a/cmds/servicemanager/service_manager.c b/cmds/servicemanager/service_manager.c
index 4c993c2..031f848 100644
--- a/cmds/servicemanager/service_manager.c
+++ b/cmds/servicemanager/service_manager.c
@@ -8,6 +8,8 @@
#include <stdlib.h>
#include <string.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 */
}