xref: /linux/security/landlock/audit.h (revision 1d636984e088b17e8587eb5ed9d9d7a80b656c4c)
133e65b0dSMickaël Salaün /* SPDX-License-Identifier: GPL-2.0-only */
233e65b0dSMickaël Salaün /*
333e65b0dSMickaël Salaün  * Landlock - Audit helpers
433e65b0dSMickaël Salaün  *
533e65b0dSMickaël Salaün  * Copyright © 2023-2025 Microsoft Corporation
633e65b0dSMickaël Salaün  */
733e65b0dSMickaël Salaün 
833e65b0dSMickaël Salaün #ifndef _SECURITY_LANDLOCK_AUDIT_H
933e65b0dSMickaël Salaün #define _SECURITY_LANDLOCK_AUDIT_H
1033e65b0dSMickaël Salaün 
1133e65b0dSMickaël Salaün #include <linux/audit.h>
1233e65b0dSMickaël Salaün #include <linux/lsm_audit.h>
1333e65b0dSMickaël Salaün 
1433e65b0dSMickaël Salaün #include "cred.h"
1533e65b0dSMickaël Salaün 
1633e65b0dSMickaël Salaün enum landlock_request_type {
1733e65b0dSMickaël Salaün 	LANDLOCK_REQUEST_PTRACE = 1,
1833e65b0dSMickaël Salaün };
1933e65b0dSMickaël Salaün 
2033e65b0dSMickaël Salaün /*
2133e65b0dSMickaël Salaün  * We should be careful to only use a variable of this type for
2233e65b0dSMickaël Salaün  * landlock_log_denial().  This way, the compiler can remove it entirely if
2333e65b0dSMickaël Salaün  * CONFIG_AUDIT is not set.
2433e65b0dSMickaël Salaün  */
2533e65b0dSMickaël Salaün struct landlock_request {
2633e65b0dSMickaël Salaün 	/* Mandatory fields. */
2733e65b0dSMickaël Salaün 	enum landlock_request_type type;
2833e65b0dSMickaël Salaün 	struct common_audit_data audit;
2933e65b0dSMickaël Salaün 
3033e65b0dSMickaël Salaün 	/**
3133e65b0dSMickaël Salaün 	 * layer_plus_one: First layer level that denies the request + 1.  The
3233e65b0dSMickaël Salaün 	 * extra one is useful to detect uninitialized field.
3333e65b0dSMickaël Salaün 	 */
3433e65b0dSMickaël Salaün 	size_t layer_plus_one;
3533e65b0dSMickaël Salaün };
3633e65b0dSMickaël Salaün 
3733e65b0dSMickaël Salaün #ifdef CONFIG_AUDIT
3833e65b0dSMickaël Salaün 
39*1d636984SMickaël Salaün void landlock_log_drop_domain(const struct landlock_hierarchy *const hierarchy);
40*1d636984SMickaël Salaün 
4133e65b0dSMickaël Salaün void landlock_log_denial(const struct landlock_cred_security *const subject,
4233e65b0dSMickaël Salaün 			 const struct landlock_request *const request);
4333e65b0dSMickaël Salaün 
4433e65b0dSMickaël Salaün #else /* CONFIG_AUDIT */
4533e65b0dSMickaël Salaün 
4633e65b0dSMickaël Salaün static inline void
47*1d636984SMickaël Salaün landlock_log_drop_domain(const struct landlock_hierarchy *const hierarchy)
48*1d636984SMickaël Salaün {
49*1d636984SMickaël Salaün }
50*1d636984SMickaël Salaün 
51*1d636984SMickaël Salaün static inline void
5233e65b0dSMickaël Salaün landlock_log_denial(const struct landlock_cred_security *const subject,
5333e65b0dSMickaël Salaün 		    const struct landlock_request *const request)
5433e65b0dSMickaël Salaün {
5533e65b0dSMickaël Salaün }
5633e65b0dSMickaël Salaün 
5733e65b0dSMickaël Salaün #endif /* CONFIG_AUDIT */
5833e65b0dSMickaël Salaün 
5933e65b0dSMickaël Salaün #endif /* _SECURITY_LANDLOCK_AUDIT_H */
60