commit 6f25517010dd ("entry: Rework syscall_audit_enter()") relies on
dead code elimination to remove the call to syscall_enter_audit() when
CONFIG_AUDITSYSCALL is disabled. However, with s390 GCC 13.4.0 +
CONFIG_KASAN, audit_context() is not inlined despite being marked
inline, causing an undefined reference to syscall_enter_audit().

Force audit_context() to be __always_inline to ensure the conditional
can be constant-folded and dead code elimination works correctly.

Signed-off-by: Jinjie Ruan <[email protected]>
Suggested-by: Thomas Gleixner <[email protected]>
Reported-by: kernel test robot <[email protected]>
Closes: 
https://lore.kernel.org/oe-kbuild-all/[email protected]/
---
 include/linux/audit.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/audit.h b/include/linux/audit.h
index 45abb3722d30..d79df1b75e74 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -343,7 +343,7 @@ static inline void audit_set_context(struct task_struct 
*task, struct audit_cont
        task->audit_context = ctx;
 }
 
-static inline struct audit_context *audit_context(void)
+static __always_inline struct audit_context *audit_context(void)
 {
        return current->audit_context;
 }
@@ -623,7 +623,7 @@ static inline bool audit_dummy_context(void)
 }
 static inline void audit_set_context(struct task_struct *task, struct 
audit_context *ctx)
 { }
-static inline struct audit_context *audit_context(void)
+static __always_inline struct audit_context *audit_context(void)
 {
        return NULL;
 }
-- 
2.34.1


Reply via email to