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