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