From 109f4e16cb22e2ae915a4c16d8c8a5e46a749d27 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Thu, 14 Feb 2013 15:47:14 -0800 Subject: adb: Use 64 bit capabilities. Fix the following kernel warning: $ adb shell dmesg | grep adb <6>[ 7.813003] warning: `adbd' uses 32-bit capabilities (legacy support in use) Change-Id: I3912302c5c577f1cb03f0c591834ab7b3a72ddf5 --- adb/adb.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'adb') diff --git a/adb/adb.c b/adb/adb.c index 92436da..399d43a 100644 --- a/adb/adb.c +++ b/adb/adb.c @@ -1238,7 +1238,7 @@ int adb_main(int is_daemon, int server_port) /* don't run as root if we are running in secure mode */ if (should_drop_privileges()) { struct __user_cap_header_struct header; - struct __user_cap_data_struct cap; + struct __user_cap_data_struct cap[2]; if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) { exit(1); @@ -1271,12 +1271,15 @@ int adb_main(int is_daemon, int server_port) exit(1); } + memset(&header, 0, sizeof(header)); + memset(cap, 0, sizeof(cap)); + /* set CAP_SYS_BOOT capability, so "adb reboot" will succeed */ - header.version = _LINUX_CAPABILITY_VERSION; + header.version = _LINUX_CAPABILITY_VERSION_3; header.pid = 0; - cap.effective = cap.permitted = (1 << CAP_SYS_BOOT); - cap.inheritable = 0; - capset(&header, &cap); + cap[CAP_TO_INDEX(CAP_SYS_BOOT)].effective |= CAP_TO_MASK(CAP_SYS_BOOT); + cap[CAP_TO_INDEX(CAP_SYS_BOOT)].permitted |= CAP_TO_MASK(CAP_SYS_BOOT); + capset(&header, cap); D("Local port disabled\n"); } else { -- cgit v1.1