summaryrefslogtreecommitdiffstats
path: root/rild
diff options
context:
space:
mode:
Diffstat (limited to 'rild')
-rw-r--r--rild/Android.mk11
-rw-r--r--rild/rild.c52
-rw-r--r--rild/rild.rc3
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