1/* SPDX-License-Identifier: GPL-2.0 */
2
3/*
4 * Copyright (C) 2023 Google LLC.
5 */
6
7#ifndef __LINUX_LSM_COUNT_H
8#define __LINUX_LSM_COUNT_H
9
10#include <linux/args.h>
11
12#ifdef CONFIG_SECURITY
13
14/*
15 * Macros to count the number of LSMs enabled in the kernel at compile time.
16 */
17
18/*
19 * Capabilities is enabled when CONFIG_SECURITY is enabled.
20 */
21#if IS_ENABLED(CONFIG_SECURITY)
22#define CAPABILITIES_ENABLED 1,
23#else
24#define CAPABILITIES_ENABLED
25#endif
26
27#if IS_ENABLED(CONFIG_SECURITY_SELINUX)
28#define SELINUX_ENABLED 1,
29#else
30#define SELINUX_ENABLED
31#endif
32
33#if IS_ENABLED(CONFIG_SECURITY_SMACK)
34#define SMACK_ENABLED 1,
35#else
36#define SMACK_ENABLED
37#endif
38
39#if IS_ENABLED(CONFIG_SECURITY_APPARMOR)
40#define APPARMOR_ENABLED 1,
41#else
42#define APPARMOR_ENABLED
43#endif
44
45#if IS_ENABLED(CONFIG_SECURITY_TOMOYO)
46#define TOMOYO_ENABLED 1,
47#else
48#define TOMOYO_ENABLED
49#endif
50
51#if IS_ENABLED(CONFIG_SECURITY_YAMA)
52#define YAMA_ENABLED 1,
53#else
54#define YAMA_ENABLED
55#endif
56
57#if IS_ENABLED(CONFIG_SECURITY_LOADPIN)
58#define LOADPIN_ENABLED 1,
59#else
60#define LOADPIN_ENABLED
61#endif
62
63#if IS_ENABLED(CONFIG_SECURITY_LOCKDOWN_LSM)
64#define LOCKDOWN_ENABLED 1,
65#else
66#define LOCKDOWN_ENABLED
67#endif
68
69#if IS_ENABLED(CONFIG_SECURITY_SAFESETID)
70#define SAFESETID_ENABLED 1,
71#else
72#define SAFESETID_ENABLED
73#endif
74
75#if IS_ENABLED(CONFIG_BPF_LSM)
76#define BPF_LSM_ENABLED 1,
77#else
78#define BPF_LSM_ENABLED
79#endif
80
81#if IS_ENABLED(CONFIG_SECURITY_LANDLOCK)
82#define LANDLOCK_ENABLED 1,
83#else
84#define LANDLOCK_ENABLED
85#endif
86
87#if IS_ENABLED(CONFIG_IMA)
88#define IMA_ENABLED 1,
89#else
90#define IMA_ENABLED
91#endif
92
93#if IS_ENABLED(CONFIG_EVM)
94#define EVM_ENABLED 1,
95#else
96#define EVM_ENABLED
97#endif
98
99#if IS_ENABLED(CONFIG_SECURITY_IPE)
100#define IPE_ENABLED 1,
101#else
102#define IPE_ENABLED
103#endif
104
105/*
106 * There is a trailing comma that we need to be accounted for. This is done by
107 * using a skipped argument in __COUNT_LSMS
108 */
109#define __COUNT_LSMS(skipped_arg, args...) COUNT_ARGS(args...)
110#define COUNT_LSMS(args...) __COUNT_LSMS(args)
111
112#define MAX_LSM_COUNT \
113 COUNT_LSMS( \
114 CAPABILITIES_ENABLED \
115 SELINUX_ENABLED \
116 SMACK_ENABLED \
117 APPARMOR_ENABLED \
118 TOMOYO_ENABLED \
119 YAMA_ENABLED \
120 LOADPIN_ENABLED \
121 LOCKDOWN_ENABLED \
122 SAFESETID_ENABLED \
123 BPF_LSM_ENABLED \
124 LANDLOCK_ENABLED \
125 IMA_ENABLED \
126 EVM_ENABLED \
127 IPE_ENABLED)
128
129#else
130
131#define MAX_LSM_COUNT 0
132
133#endif /* CONFIG_SECURITY */
134
135#endif /* __LINUX_LSM_COUNT_H */
136