xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/securebits.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_SECUREBITS_H
3*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_SECUREBITS_H
4*f80ad8b4SAndroid Build Coastguard Worker 
5*f80ad8b4SAndroid Build Coastguard Worker /* Each securesetting is implemented using two bits. One bit specifies
6*f80ad8b4SAndroid Build Coastguard Worker    whether the setting is on or off. The other bit specify whether the
7*f80ad8b4SAndroid Build Coastguard Worker    setting is locked or not. A setting which is locked cannot be
8*f80ad8b4SAndroid Build Coastguard Worker    changed from user-level. */
9*f80ad8b4SAndroid Build Coastguard Worker #define issecure_mask(X)	(1 << (X))
10*f80ad8b4SAndroid Build Coastguard Worker 
11*f80ad8b4SAndroid Build Coastguard Worker #define SECUREBITS_DEFAULT 0x00000000
12*f80ad8b4SAndroid Build Coastguard Worker 
13*f80ad8b4SAndroid Build Coastguard Worker /* When set UID 0 has no special privileges. When unset, we support
14*f80ad8b4SAndroid Build Coastguard Worker    inheritance of root-permissions and suid-root executable under
15*f80ad8b4SAndroid Build Coastguard Worker    compatibility mode. We raise the effective and inheritable bitmasks
16*f80ad8b4SAndroid Build Coastguard Worker    *of the executable file* if the effective uid of the new process is
17*f80ad8b4SAndroid Build Coastguard Worker    0. If the real uid is 0, we raise the effective (legacy) bit of the
18*f80ad8b4SAndroid Build Coastguard Worker    executable file. */
19*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NOROOT			0
20*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NOROOT_LOCKED		1  /* make bit-0 immutable */
21*f80ad8b4SAndroid Build Coastguard Worker 
22*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NOROOT		(issecure_mask(SECURE_NOROOT))
23*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NOROOT_LOCKED	(issecure_mask(SECURE_NOROOT_LOCKED))
24*f80ad8b4SAndroid Build Coastguard Worker 
25*f80ad8b4SAndroid Build Coastguard Worker /* When set, setuid to/from uid 0 does not trigger capability-"fixup".
26*f80ad8b4SAndroid Build Coastguard Worker    When unset, to provide compatiblility with old programs relying on
27*f80ad8b4SAndroid Build Coastguard Worker    set*uid to gain/lose privilege, transitions to/from uid 0 cause
28*f80ad8b4SAndroid Build Coastguard Worker    capabilities to be gained/lost. */
29*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NO_SETUID_FIXUP		2
30*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NO_SETUID_FIXUP_LOCKED	3  /* make bit-2 immutable */
31*f80ad8b4SAndroid Build Coastguard Worker 
32*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NO_SETUID_FIXUP	(issecure_mask(SECURE_NO_SETUID_FIXUP))
33*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NO_SETUID_FIXUP_LOCKED \
34*f80ad8b4SAndroid Build Coastguard Worker 			(issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
35*f80ad8b4SAndroid Build Coastguard Worker 
36*f80ad8b4SAndroid Build Coastguard Worker /* When set, a process can retain its capabilities even after
37*f80ad8b4SAndroid Build Coastguard Worker    transitioning to a non-root user (the set-uid fixup suppressed by
38*f80ad8b4SAndroid Build Coastguard Worker    bit 2). Bit-4 is cleared when a process calls exec(); setting both
39*f80ad8b4SAndroid Build Coastguard Worker    bit 4 and 5 will create a barrier through exec that no exec()'d
40*f80ad8b4SAndroid Build Coastguard Worker    child can use this feature again. */
41*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_KEEP_CAPS		4
42*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_KEEP_CAPS_LOCKED		5  /* make bit-4 immutable */
43*f80ad8b4SAndroid Build Coastguard Worker 
44*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_KEEP_CAPS	(issecure_mask(SECURE_KEEP_CAPS))
45*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
46*f80ad8b4SAndroid Build Coastguard Worker 
47*f80ad8b4SAndroid Build Coastguard Worker /* When set, a process cannot add new capabilities to its ambient set. */
48*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NO_CAP_AMBIENT_RAISE		6
49*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_NO_CAP_AMBIENT_RAISE_LOCKED	7  /* make bit-6 immutable */
50*f80ad8b4SAndroid Build Coastguard Worker 
51*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NO_CAP_AMBIENT_RAISE (issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
52*f80ad8b4SAndroid Build Coastguard Worker #define SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED \
53*f80ad8b4SAndroid Build Coastguard Worker 			(issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE_LOCKED))
54*f80ad8b4SAndroid Build Coastguard Worker 
55*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_ALL_BITS		(issecure_mask(SECURE_NOROOT) | \
56*f80ad8b4SAndroid Build Coastguard Worker 				 issecure_mask(SECURE_NO_SETUID_FIXUP) | \
57*f80ad8b4SAndroid Build Coastguard Worker 				 issecure_mask(SECURE_KEEP_CAPS) | \
58*f80ad8b4SAndroid Build Coastguard Worker 				 issecure_mask(SECURE_NO_CAP_AMBIENT_RAISE))
59*f80ad8b4SAndroid Build Coastguard Worker #define SECURE_ALL_LOCKS	(SECURE_ALL_BITS << 1)
60*f80ad8b4SAndroid Build Coastguard Worker 
61*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_SECUREBITS_H */
62