diff options
Diffstat (limited to 'rild')
-rw-r--r-- | rild/Android.mk | 11 | ||||
-rw-r--r-- | rild/rild.c | 52 | ||||
-rw-r--r-- | rild/rild.rc | 3 |
3 files changed, 9 insertions, 57 deletions
diff --git a/rild/Android.mk b/rild/Android.mk index fe81d22..4f5802b 100644 --- a/rild/Android.mk +++ b/rild/Android.mk @@ -6,21 +6,20 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ rild.c - LOCAL_SHARED_LIBRARIES := \ - liblog \ libcutils \ - libril \ - libdl + libdl \ + liblog \ + libril -# temporary hack for broken vendor rils +# Temporary hack for broken vendor RILs. LOCAL_WHOLE_STATIC_LIBRARIES := \ librilutils_static LOCAL_CFLAGS := -DRIL_SHLIB -#LOCAL_CFLAGS += -DANDROID_MULTI_SIM ifeq ($(SIM_COUNT), 2) + LOCAL_CFLAGS += -DANDROID_MULTI_SIM LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2 endif diff --git a/rild/rild.c b/rild/rild.c index d324692..96bd2ff 100644 --- a/rild/rild.c +++ b/rild/rild.c @@ -40,7 +40,6 @@ #define LIB_PATH_PROPERTY "rild.libpath" #define LIB_ARGS_PROPERTY "rild.libargs" #define MAX_LIB_ARGS 16 -#define MAX_CAP_NUM (CAP_TO_INDEX(CAP_LAST_CAP) + 1) static void usage(const char *argv0) { fprintf(stderr, "Usage: %s -l <ril impl library> [-- <args for impl library>]\n", argv0); @@ -98,54 +97,9 @@ static int make_argv(char * args, char ** argv) { return count; } -/* - * switchUser - Switches UID to radio, preserving CAP_NET_ADMIN capabilities. - * Our group, cache, was set by init. - */ -void switchUser() { - char debuggable[PROP_VALUE_MAX]; - - prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0); - if (setresuid(AID_RADIO, AID_RADIO, AID_RADIO) == -1) { - RLOGE("setresuid failed: %s", strerror(errno)); - exit(EXIT_FAILURE); - } - - struct __user_cap_header_struct header; - memset(&header, 0, sizeof(header)); - header.version = _LINUX_CAPABILITY_VERSION_3; - header.pid = 0; - - struct __user_cap_data_struct data[MAX_CAP_NUM]; - memset(&data, 0, sizeof(data)); - - data[CAP_TO_INDEX(CAP_NET_ADMIN)].effective |= CAP_TO_MASK(CAP_NET_ADMIN); - data[CAP_TO_INDEX(CAP_NET_ADMIN)].permitted |= CAP_TO_MASK(CAP_NET_ADMIN); - - data[CAP_TO_INDEX(CAP_NET_RAW)].effective |= CAP_TO_MASK(CAP_NET_RAW); - data[CAP_TO_INDEX(CAP_NET_RAW)].permitted |= CAP_TO_MASK(CAP_NET_RAW); - - data[CAP_TO_INDEX(CAP_BLOCK_SUSPEND)].effective |= CAP_TO_MASK(CAP_BLOCK_SUSPEND); - data[CAP_TO_INDEX(CAP_BLOCK_SUSPEND)].permitted |= CAP_TO_MASK(CAP_BLOCK_SUSPEND); - - if (capset(&header, &data[0]) == -1) { - RLOGE("capset failed: %s", strerror(errno)); - exit(EXIT_FAILURE); - } - - /* - * Debuggable build only: - * Set DUMPABLE that was cleared by setuid() to have tombstone on RIL crash - */ - property_get("ro.debuggable", debuggable, "0"); - if (strcmp(debuggable, "1") == 0) { - prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); - } -} - int main(int argc, char **argv) { // vendor ril lib path either passed in as -l parameter, or read from rild.libpath property - const char * rilLibPath = NULL; + const char *rilLibPath = NULL; // ril arguments either passed in as -- parameter, or read from rild.libargs property char **rilArgv; // handle for vendor ril lib @@ -209,8 +163,6 @@ int main(int argc, char **argv) { } } - switchUser(); - dlHandle = dlopen(rilLibPath, RTLD_NOW); if (dlHandle == NULL) { @@ -252,7 +204,7 @@ int main(int argc, char **argv) { } rilArgv[argc++] = "-c"; - rilArgv[argc++] = clientId; + rilArgv[argc++] = (char*)clientId; RLOGD("RIL_Init argc = %d clientId = %s", argc, rilArgv[argc-1]); // Make sure there's a reasonable argv[0] diff --git a/rild/rild.rc b/rild/rild.rc index 2aa8c63..b27e1da 100644 --- a/rild/rild.rc +++ b/rild/rild.rc @@ -1,4 +1,5 @@ service ril-daemon /vendor/bin/hw/rild class main - user root + user radio group radio cache inet misc audio log readproc wakelock + capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW |