1fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich/* 2fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * Copyright (C) 2013 The Android Open Source Project 3fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * 4fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * Licensed under the Apache License, Version 2.0 (the "License"); 5fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * you may not use this file except in compliance with the License. 6fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * You may obtain a copy of the License at 7fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * 8fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * http://www.apache.org/licenses/LICENSE-2.0 9fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * 10fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * Unless required by applicable law or agreed to in writing, software 11fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * distributed under the License is distributed on an "AS IS" BASIS, 12fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * See the License for the specific language governing permissions and 14fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * limitations under the License. 15fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich */ 16fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 17fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich/* 18fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich * Taken from linux/capability.h, with minor modifications 19fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich */ 20fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 21fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#ifndef _SYSTEM_CORE_INCLUDE_PRIVATE_ANDROID_FILESYSTEM_CAPABILITY_H 22fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _SYSTEM_CORE_INCLUDE_PRIVATE_ANDROID_FILESYSTEM_CAPABILITY_H 23fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 24fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#include <stdint.h> 25fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 26fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define __user 27fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define __u32 uint32_t 28fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define __le32 uint32_t 29fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 30fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_VERSION_1 0x19980330 31fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_U32S_1 1 32fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_VERSION_2 0x20071026 33fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_U32S_2 2 34fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_VERSION_3 0x20080522 35fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_U32S_3 2 36fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 37fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevichtypedef struct __user_cap_header_struct { 38fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __u32 version; 39fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich int pid; 40fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich} __user *cap_user_header_t; 41fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 42fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevichtypedef struct __user_cap_data_struct { 43fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __u32 effective; 44fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __u32 permitted; 45fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __u32 inheritable; 46fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich} __user *cap_user_data_t; 47fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 48fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_REVISION_MASK 0xFF000000 49fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_REVISION_SHIFT 24 50fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_FLAGS_MASK ~VFS_CAP_REVISION_MASK 51fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_FLAGS_EFFECTIVE 0x000001 52fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_REVISION_1 0x01000000 53fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_U32_1 1 54fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define XATTR_CAPS_SZ_1 (sizeof(__le32)*(1 + 2*VFS_CAP_U32_1)) 55fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_REVISION_2 0x02000000 56fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_U32_2 2 57fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define XATTR_CAPS_SZ_2 (sizeof(__le32)*(1 + 2*VFS_CAP_U32_2)) 58fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define XATTR_CAPS_SZ XATTR_CAPS_SZ_2 59fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_U32 VFS_CAP_U32_2 60fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define VFS_CAP_REVISION VFS_CAP_REVISION_2 61fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 62fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevichstruct vfs_cap_data { 63fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __le32 magic_etc; 64fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich struct { 65fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __le32 permitted; 66fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich __le32 inheritable; 67fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich } data[VFS_CAP_U32]; 68fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich}; 69fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 70fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_1 71fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define _LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_1 72fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_CHOWN 0 73fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_DAC_OVERRIDE 1 74fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_DAC_READ_SEARCH 2 75fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_FOWNER 3 76fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_FSETID 4 77fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_KILL 5 78fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SETGID 6 79fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SETUID 7 80fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SETPCAP 8 81fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_LINUX_IMMUTABLE 9 82fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_NET_BIND_SERVICE 10 83fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_NET_BROADCAST 11 84fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_NET_ADMIN 12 85fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_NET_RAW 13 86fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_IPC_LOCK 14 87fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_IPC_OWNER 15 88fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_MODULE 16 89fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_RAWIO 17 90fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_CHROOT 18 91fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_PTRACE 19 92fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_PACCT 20 93fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_ADMIN 21 94fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_BOOT 22 95fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_NICE 23 96fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_RESOURCE 24 97fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_TIME 25 98fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYS_TTY_CONFIG 26 99fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_MKNOD 27 100fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_LEASE 28 101fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_AUDIT_WRITE 29 102fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_AUDIT_CONTROL 30 103fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SETFCAP 31 104fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_MAC_OVERRIDE 32 105fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_MAC_ADMIN 33 106fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_SYSLOG 34 107fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_WAKE_ALARM 35 10883e6f2606b9c3488454a7bb01c7341fb43b59ac7Tim Kilbourn#define CAP_BLOCK_SUSPEND 36 10983e6f2606b9c3488454a7bb01c7341fb43b59ac7Tim Kilbourn#define CAP_AUDIT_READ 37 11083e6f2606b9c3488454a7bb01c7341fb43b59ac7Tim Kilbourn#define CAP_LAST_CAP CAP_AUDIT_READ 111fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP) 112fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_TO_INDEX(x) ((x) >> 5) 113fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#define CAP_TO_MASK(x) (1 << ((x) & 31)) 114fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 115fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#undef __user 116fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#undef __u32 117fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#undef __le32 118fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich 119fe8135739c5a9195e74786205c077964ba4f9c44Nick Kralevich#endif 120