xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/lsm.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * Linux Security Modules (LSM) - User space API
4*f80ad8b4SAndroid Build Coastguard Worker  *
5*f80ad8b4SAndroid Build Coastguard Worker  * Copyright (C) 2022 Casey Schaufler <[email protected]>
6*f80ad8b4SAndroid Build Coastguard Worker  * Copyright (C) 2022 Intel Corporation
7*f80ad8b4SAndroid Build Coastguard Worker  */
8*f80ad8b4SAndroid Build Coastguard Worker 
9*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_LSM_H
10*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_LSM_H
11*f80ad8b4SAndroid Build Coastguard Worker 
12*f80ad8b4SAndroid Build Coastguard Worker #include <linux/stddef.h>
13*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/unistd.h>
15*f80ad8b4SAndroid Build Coastguard Worker 
16*f80ad8b4SAndroid Build Coastguard Worker /**
17*f80ad8b4SAndroid Build Coastguard Worker  * struct lsm_ctx - LSM context information
18*f80ad8b4SAndroid Build Coastguard Worker  * @id: the LSM id number, see LSM_ID_XXX
19*f80ad8b4SAndroid Build Coastguard Worker  * @flags: LSM specific flags
20*f80ad8b4SAndroid Build Coastguard Worker  * @len: length of the lsm_ctx struct, @ctx and any other data or padding
21*f80ad8b4SAndroid Build Coastguard Worker  * @ctx_len: the size of @ctx
22*f80ad8b4SAndroid Build Coastguard Worker  * @ctx: the LSM context value
23*f80ad8b4SAndroid Build Coastguard Worker  *
24*f80ad8b4SAndroid Build Coastguard Worker  * The @len field MUST be equal to the size of the lsm_ctx struct
25*f80ad8b4SAndroid Build Coastguard Worker  * plus any additional padding and/or data placed after @ctx.
26*f80ad8b4SAndroid Build Coastguard Worker  *
27*f80ad8b4SAndroid Build Coastguard Worker  * In all cases @ctx_len MUST be equal to the length of @ctx.
28*f80ad8b4SAndroid Build Coastguard Worker  * If @ctx is a string value it should be nul terminated with
29*f80ad8b4SAndroid Build Coastguard Worker  * @ctx_len equal to `strlen(@ctx) + 1`.  Binary values are
30*f80ad8b4SAndroid Build Coastguard Worker  * supported.
31*f80ad8b4SAndroid Build Coastguard Worker  *
32*f80ad8b4SAndroid Build Coastguard Worker  * The @flags and @ctx fields SHOULD only be interpreted by the
33*f80ad8b4SAndroid Build Coastguard Worker  * LSM specified by @id; they MUST be set to zero/0 when not used.
34*f80ad8b4SAndroid Build Coastguard Worker  */
35*f80ad8b4SAndroid Build Coastguard Worker struct lsm_ctx {
36*f80ad8b4SAndroid Build Coastguard Worker 	__u64 id;
37*f80ad8b4SAndroid Build Coastguard Worker 	__u64 flags;
38*f80ad8b4SAndroid Build Coastguard Worker 	__u64 len;
39*f80ad8b4SAndroid Build Coastguard Worker 	__u64 ctx_len;
40*f80ad8b4SAndroid Build Coastguard Worker 	__u8 ctx[] __counted_by(ctx_len);
41*f80ad8b4SAndroid Build Coastguard Worker };
42*f80ad8b4SAndroid Build Coastguard Worker 
43*f80ad8b4SAndroid Build Coastguard Worker /*
44*f80ad8b4SAndroid Build Coastguard Worker  * ID tokens to identify Linux Security Modules (LSMs)
45*f80ad8b4SAndroid Build Coastguard Worker  *
46*f80ad8b4SAndroid Build Coastguard Worker  * These token values are used to uniquely identify specific LSMs
47*f80ad8b4SAndroid Build Coastguard Worker  * in the kernel as well as in the kernel's LSM userspace API.
48*f80ad8b4SAndroid Build Coastguard Worker  *
49*f80ad8b4SAndroid Build Coastguard Worker  * A value of zero/0 is considered undefined and should not be used
50*f80ad8b4SAndroid Build Coastguard Worker  * outside the kernel. Values 1-99 are reserved for potential
51*f80ad8b4SAndroid Build Coastguard Worker  * future use.
52*f80ad8b4SAndroid Build Coastguard Worker  */
53*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_UNDEF		0
54*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_CAPABILITY	100
55*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_SELINUX		101
56*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_SMACK		102
57*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_TOMOYO		103
58*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_APPARMOR		104
59*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_YAMA		105
60*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_LOADPIN		106
61*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_SAFESETID	107
62*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_LOCKDOWN		108
63*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_BPF		109
64*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_LANDLOCK		110
65*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_IMA		111
66*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ID_EVM		112
67*f80ad8b4SAndroid Build Coastguard Worker 
68*f80ad8b4SAndroid Build Coastguard Worker /*
69*f80ad8b4SAndroid Build Coastguard Worker  * LSM_ATTR_XXX definitions identify different LSM attributes
70*f80ad8b4SAndroid Build Coastguard Worker  * which are used in the kernel's LSM userspace API. Support
71*f80ad8b4SAndroid Build Coastguard Worker  * for these attributes vary across the different LSMs. None
72*f80ad8b4SAndroid Build Coastguard Worker  * are required.
73*f80ad8b4SAndroid Build Coastguard Worker  *
74*f80ad8b4SAndroid Build Coastguard Worker  * A value of zero/0 is considered undefined and should not be used
75*f80ad8b4SAndroid Build Coastguard Worker  * outside the kernel. Values 1-99 are reserved for potential
76*f80ad8b4SAndroid Build Coastguard Worker  * future use.
77*f80ad8b4SAndroid Build Coastguard Worker  */
78*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_UNDEF		0
79*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_CURRENT	100
80*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_EXEC		101
81*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_FSCREATE	102
82*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_KEYCREATE	103
83*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_PREV		104
84*f80ad8b4SAndroid Build Coastguard Worker #define LSM_ATTR_SOCKCREATE	105
85*f80ad8b4SAndroid Build Coastguard Worker 
86*f80ad8b4SAndroid Build Coastguard Worker /*
87*f80ad8b4SAndroid Build Coastguard Worker  * LSM_FLAG_XXX definitions identify special handling instructions
88*f80ad8b4SAndroid Build Coastguard Worker  * for the API.
89*f80ad8b4SAndroid Build Coastguard Worker  */
90*f80ad8b4SAndroid Build Coastguard Worker #define LSM_FLAG_SINGLE	0x0001
91*f80ad8b4SAndroid Build Coastguard Worker 
92*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_LSM_H */
93