xref: /linux/security/landlock/audit.h (revision 33e65b0d3add6bdc731e9298995cbbc979349f51)
1*33e65b0dSMickaël Salaün /* SPDX-License-Identifier: GPL-2.0-only */
2*33e65b0dSMickaël Salaün /*
3*33e65b0dSMickaël Salaün  * Landlock - Audit helpers
4*33e65b0dSMickaël Salaün  *
5*33e65b0dSMickaël Salaün  * Copyright © 2023-2025 Microsoft Corporation
6*33e65b0dSMickaël Salaün  */
7*33e65b0dSMickaël Salaün 
8*33e65b0dSMickaël Salaün #ifndef _SECURITY_LANDLOCK_AUDIT_H
9*33e65b0dSMickaël Salaün #define _SECURITY_LANDLOCK_AUDIT_H
10*33e65b0dSMickaël Salaün 
11*33e65b0dSMickaël Salaün #include <linux/audit.h>
12*33e65b0dSMickaël Salaün #include <linux/lsm_audit.h>
13*33e65b0dSMickaël Salaün 
14*33e65b0dSMickaël Salaün #include "cred.h"
15*33e65b0dSMickaël Salaün 
16*33e65b0dSMickaël Salaün enum landlock_request_type {
17*33e65b0dSMickaël Salaün 	LANDLOCK_REQUEST_PTRACE = 1,
18*33e65b0dSMickaël Salaün };
19*33e65b0dSMickaël Salaün 
20*33e65b0dSMickaël Salaün /*
21*33e65b0dSMickaël Salaün  * We should be careful to only use a variable of this type for
22*33e65b0dSMickaël Salaün  * landlock_log_denial().  This way, the compiler can remove it entirely if
23*33e65b0dSMickaël Salaün  * CONFIG_AUDIT is not set.
24*33e65b0dSMickaël Salaün  */
25*33e65b0dSMickaël Salaün struct landlock_request {
26*33e65b0dSMickaël Salaün 	/* Mandatory fields. */
27*33e65b0dSMickaël Salaün 	enum landlock_request_type type;
28*33e65b0dSMickaël Salaün 	struct common_audit_data audit;
29*33e65b0dSMickaël Salaün 
30*33e65b0dSMickaël Salaün 	/**
31*33e65b0dSMickaël Salaün 	 * layer_plus_one: First layer level that denies the request + 1.  The
32*33e65b0dSMickaël Salaün 	 * extra one is useful to detect uninitialized field.
33*33e65b0dSMickaël Salaün 	 */
34*33e65b0dSMickaël Salaün 	size_t layer_plus_one;
35*33e65b0dSMickaël Salaün };
36*33e65b0dSMickaël Salaün 
37*33e65b0dSMickaël Salaün #ifdef CONFIG_AUDIT
38*33e65b0dSMickaël Salaün 
39*33e65b0dSMickaël Salaün void landlock_log_denial(const struct landlock_cred_security *const subject,
40*33e65b0dSMickaël Salaün 			 const struct landlock_request *const request);
41*33e65b0dSMickaël Salaün 
42*33e65b0dSMickaël Salaün #else /* CONFIG_AUDIT */
43*33e65b0dSMickaël Salaün 
44*33e65b0dSMickaël Salaün static inline void
45*33e65b0dSMickaël Salaün landlock_log_denial(const struct landlock_cred_security *const subject,
46*33e65b0dSMickaël Salaün 		    const struct landlock_request *const request)
47*33e65b0dSMickaël Salaün {
48*33e65b0dSMickaël Salaün }
49*33e65b0dSMickaël Salaün 
50*33e65b0dSMickaël Salaün #endif /* CONFIG_AUDIT */
51*33e65b0dSMickaël Salaün 
52*33e65b0dSMickaël Salaün #endif /* _SECURITY_LANDLOCK_AUDIT_H */
53