summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSukanya Rajkhowa <srajkh@codeaurora.org>2015-01-14 17:56:25 -0800
committerNathan Harold <nharold@google.com>2015-07-29 12:34:59 -0700
commit40aa12695e57655ddc4aa2e7e6dbac168ccb578c (patch)
tree45b3f7963200f2e44203c0df8aa8d8752e4c04bc
parenta408c25e93fba444995af1ec8070802fb7662495 (diff)
downloadandroid_hardware_ril-40aa12695e57655ddc4aa2e7e6dbac168ccb578c.tar.gz
android_hardware_ril-40aa12695e57655ddc4aa2e7e6dbac168ccb578c.tar.bz2
android_hardware_ril-40aa12695e57655ddc4aa2e7e6dbac168ccb578c.zip
Added support for acquiring CAP_BLOCK_SUSPEND capability
- Linux kernel 3.10 onward power service mandates the user space processes that use wake_lock service to have CAP_BLOCK_SUSPEND capability. Made changes in rild process to acquire the same - Rild: Use division while defining MAX_CAP_NUM Bug: 21063398 Change-Id: Idf38d9bde398e748139a6e5d7e7d9a1ac106ec8d
-rw-r--r--rild/rild.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/rild/rild.c b/rild/rild.c
index 6324253..c63da38 100644
--- a/rild/rild.c
+++ b/rild/rild.c
@@ -41,6 +41,7 @@
#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);
@@ -108,7 +109,7 @@ void switchUser() {
header.version = _LINUX_CAPABILITY_VERSION_3;
header.pid = 0;
- struct __user_cap_data_struct data[2];
+ 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);
@@ -117,6 +118,9 @@ void switchUser() {
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);