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