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
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 @@
     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 @@
     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);