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