#include <private/android_filesystem_config.h> #include <sys/prctl.h> #include <linux/capability.h> /* Set UID to bluetooth w/ CAP_NET_RAW, CAP_NET_ADMIN and CAP_NET_BIND_SERVICE * (Android's init.rc does not yet support applying linux capabilities) */ void android_set_aid_and_cap() { prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0); setuid(AID_BLUETOOTH); struct __user_cap_header_struct header; struct __user_cap_data_struct cap; header.version = _LINUX_CAPABILITY_VERSION; header.pid = 0; cap.effective = cap.permitted = 1 << CAP_NET_RAW | 1 << CAP_NET_ADMIN | 1 << CAP_NET_BIND_SERVICE; cap.inheritable = 0; capset(&header, &cap); }