mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
@ 2026-09-03 11:35 kernel test robot
  2026-09-03 20:03 ` Thomas Gleixner
  0 siblings, 1 reply; 5+ messages in thread
From: kernel test robot @ 2026-09-03 11:35 UTC (permalink / raw)
  To: Thomas Gleixner; +Cc: oe-kbuild-all, linux-kernel, Jinjie Ruan

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   940de590b839f71d6dc846160534bf202401b8b7
commit: 6f25517010ddd3f8080d7e06b9b1cb1b64b73772 entry: Rework syscall_audit_enter()
date:   6 weeks ago
config: riscv-randconfig-r052-20260903 (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 6f25517010dd ("entry: Rework syscall_audit_enter()")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609031938.ZvZZaRQy-lkp@intel.com/

All errors (new ones prefixed by >>):

   riscv64-linux-ld: arch/riscv/kernel/traps.o: in function `__exit_to_user_mode_validate':
>> include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'


vim +218 include/linux/irq-entry-common.h

a70e9f647f501e3 Jinjie Ruan     2025-06-24  212  
70fe25a3bc53a89 Thomas Gleixner 2025-10-27  213  static __always_inline void __exit_to_user_mode_validate(void)
70fe25a3bc53a89 Thomas Gleixner 2025-10-27  214  {
a70e9f647f501e3 Jinjie Ruan     2025-06-24  215  	/* Ensure that kernel state is sane for a return to userspace */
a70e9f647f501e3 Jinjie Ruan     2025-06-24  216  	kmap_assert_nomap();
a70e9f647f501e3 Jinjie Ruan     2025-06-24  217  	lockdep_assert_irqs_disabled();
a70e9f647f501e3 Jinjie Ruan     2025-06-24 @218  	lockdep_sys_exit();
a70e9f647f501e3 Jinjie Ruan     2025-06-24  219  }
a70e9f647f501e3 Jinjie Ruan     2025-06-24  220  

:::::: The code at line 218 was first introduced by commit
:::::: a70e9f647f501e36a6a092888b1ea7386b7c5664 entry: Split generic entry into generic exception and syscall entry

:::::: TO: Jinjie Ruan <ruanjinjie@huawei.com>
:::::: CC: Thomas Gleixner <tglx@linutronix.de>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
  2026-09-03 11:35 include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit' kernel test robot
@ 2026-09-03 20:03 ` Thomas Gleixner
  2026-09-04 13:42   ` Philip Li
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Gleixner @ 2026-09-03 20:03 UTC (permalink / raw)
  To: kernel test robot; +Cc: oe-kbuild-all, linux-kernel, Jinjie Ruan

On Thu, Sep 03 2026 at 19:35, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head:   940de590b839f71d6dc846160534bf202401b8b7
> commit: 6f25517010ddd3f8080d7e06b9b1cb1b64b73772 entry: Rework syscall_audit_enter()
> date:   6 weeks ago
> config: riscv-randconfig-r052-20260903 (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/config)
> compiler: riscv64-linux-gcc (GCC) 8.5.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Fixes: 6f25517010dd ("entry: Rework syscall_audit_enter()")
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202609031938.ZvZZaRQy-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
>    riscv64-linux-ld: arch/riscv/kernel/traps.o: in function `__exit_to_user_mode_validate':
>>> include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'

Seriously?

>
> vim +218 include/linux/irq-entry-common.h
>
> a70e9f647f501e3 Jinjie Ruan     2025-06-24  212  
> 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  213  static __always_inline void __exit_to_user_mode_validate(void)
> 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  214  {
> a70e9f647f501e3 Jinjie Ruan     2025-06-24  215  	/* Ensure that kernel state is sane for a return to userspace */
> a70e9f647f501e3 Jinjie Ruan     2025-06-24  216  	kmap_assert_nomap();
> a70e9f647f501e3 Jinjie Ruan     2025-06-24  217  	lockdep_assert_irqs_disabled();
> a70e9f647f501e3 Jinjie Ruan     2025-06-24 @218  	lockdep_sys_exit();

What the heck has line 218 to do with that failure?

This is getting stupid. It seems there is yet another compiler aside of
s390 gcc which fails to do dead code elimination but this time it's
worse it also points to the wrong place ....

Thanks,

        tglx

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
  2026-09-03 20:03 ` Thomas Gleixner
@ 2026-09-04 13:42   ` Philip Li
  2026-09-04 22:40     ` Thomas Gleixner
  0 siblings, 1 reply; 5+ messages in thread
From: Philip Li @ 2026-09-04 13:42 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: kernel test robot, oe-kbuild-all, linux-kernel, Jinjie Ruan

On Thu, Sep 03, 2026 at 10:03:56PM +0200, Thomas Gleixner wrote:
> On Thu, Sep 03 2026 at 19:35, kernel test robot wrote:
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > head:   940de590b839f71d6dc846160534bf202401b8b7
> > commit: 6f25517010ddd3f8080d7e06b9b1cb1b64b73772 entry: Rework syscall_audit_enter()
> > date:   6 weeks ago
> > config: riscv-randconfig-r052-20260903 (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/config)
> > compiler: riscv64-linux-gcc (GCC) 8.5.0
> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260903/202609031938.ZvZZaRQy-lkp@intel.com/reproduce)
> >
> > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > the same patch/commit), kindly add following tags
> > | Fixes: 6f25517010dd ("entry: Rework syscall_audit_enter()")
> > | Reported-by: kernel test robot <lkp@intel.com>
> > | Closes: https://lore.kernel.org/oe-kbuild-all/202609031938.ZvZZaRQy-lkp@intel.com/
> >
> > All errors (new ones prefixed by >>):
> >
> >    riscv64-linux-ld: arch/riscv/kernel/traps.o: in function `__exit_to_user_mode_validate':
> >>> include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
> 
> Seriously?
> 
> >
> > vim +218 include/linux/irq-entry-common.h
> >
> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  212  
> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  213  static __always_inline void __exit_to_user_mode_validate(void)
> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  214  {
> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  215  	/* Ensure that kernel state is sane for a return to userspace */
> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  216  	kmap_assert_nomap();
> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  217  	lockdep_assert_irqs_disabled();
> > a70e9f647f501e3 Jinjie Ruan     2025-06-24 @218  	lockdep_sys_exit();
> 
> What the heck has line 218 to do with that failure?
> 
> This is getting stupid. It seems there is yet another compiler aside of
> s390 gcc which fails to do dead code elimination but this time it's
> worse it also points to the wrong place ....

Sorry for the confusion, I give a try with riscv gcc 12.5.0 for the same kconfig, the
result is below

	include/asm-generic/preempt.h:54:(.noinstr.text+0x1a20): undefined reference to 'syscall_enter_audit'

This is FYI, I will further think of how to provide better error info, probably favor
newer compiler more during the bot testing.

> 
> Thanks,
> 
>         tglx
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
  2026-09-04 13:42   ` Philip Li
@ 2026-09-04 22:40     ` Thomas Gleixner
  2026-09-05  8:43       ` [PATCH] entry: Guard syscall_enter_audit() invocation with CONFIG_AUDITSYSCALL Thomas Gleixner
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Gleixner @ 2026-09-04 22:40 UTC (permalink / raw)
  To: Philip Li; +Cc: kernel test robot, oe-kbuild-all, linux-kernel, Jinjie Ruan

On Fri, Sep 04 2026 at 21:42, Philip Li wrote:
> On Thu, Sep 03, 2026 at 10:03:56PM +0200, Thomas Gleixner wrote:
>> > All errors (new ones prefixed by >>):
>> >
>> >    riscv64-linux-ld: arch/riscv/kernel/traps.o: in function `__exit_to_user_mode_validate':
>> >>> include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit'
>> 
>> Seriously?
>> 
>> >
>> > vim +218 include/linux/irq-entry-common.h
>> >
>> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  212  
>> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  213  static __always_inline void __exit_to_user_mode_validate(void)
>> > 70fe25a3bc53a89 Thomas Gleixner 2025-10-27  214  {
>> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  215  	/* Ensure that kernel state is sane for a return to userspace */
>> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  216  	kmap_assert_nomap();
>> > a70e9f647f501e3 Jinjie Ruan     2025-06-24  217  	lockdep_assert_irqs_disabled();
>> > a70e9f647f501e3 Jinjie Ruan     2025-06-24 @218  	lockdep_sys_exit();
>> 
>> What the heck has line 218 to do with that failure?
>> 
>> This is getting stupid. It seems there is yet another compiler aside of
>> s390 gcc which fails to do dead code elimination but this time it's
>> worse it also points to the wrong place ....
>
> Sorry for the confusion, I give a try with riscv gcc 12.5.0 for the same kconfig, the
> result is below
>
> 	include/asm-generic/preempt.h:54:(.noinstr.text+0x1a20): undefined reference to 'syscall_enter_audit'

which has nothing to do with the unresolved reference either. preempt.h
definitely does not invoke syscall_enter_audit(). I love broken tools.

IIRC I saw something like this before with some broken S390 compiler
failing to eliminate the call because it out of lined the condition
inline which when inlined causes the dead code elimination to get rid of
it. I'll grab that config tomorrow and look at the output.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] entry: Guard syscall_enter_audit() invocation with CONFIG_AUDITSYSCALL
  2026-09-04 22:40     ` Thomas Gleixner
@ 2026-09-05  8:43       ` Thomas Gleixner
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2026-09-05  8:43 UTC (permalink / raw)
  To: Philip Li
  Cc: kernel test robot, oe-kbuild-all, linux-kernel, Jinjie Ruan, linux-riscv

A bunch of older cross compilers notably RISCV64 and S390 fail to eliminate
the dead code when CONFIG_AUDITSYSCALL=n. The code in question is:

     if (unlikely(audit_context())
     	syscall_enter_audit(regs);

and in case of CONFIG_AUDITSYSCALL=n:

  static inline struct audit_context *audit_context(void)
  {
        return NULL;
  }

which should make the compiler eliminate the syscall_enter_audit()
call. But a RISV64 GCC12 cross compiler translates that into:

        if (unlikely(audit_context()))
    1c34:       00000097                auipc   ra,0x0
    1c38:       000080e7                jalr    ra # 1c34 <.L785>
    1c3c:       c511                    beqz    a0,1c48 <.L787>
                syscall_enter_audit(regs);
    1c3e:       8526                    mv      a0,s1
    1c40:       00000097                auipc   ra,0x0
    1c44:       000080e7                jalr    ra # 1c40 <.L785+0xc>

and then claims in the failing link:

   include/asm-generic/preempt.h:54:(.noinstr.text+0x1a20):
	undefined reference to 'syscall_enter_audit'

which is obviously hallucination.

Add an explicit IS_ENABLED(CONFIG_AUDITSYSCALL) check into the condition to
cure this compiler madness.

Fixes: 6f25517010dd ("entry: Rework syscall_audit_enter()")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Cc: stable@vger.kernel.org
Closes: https://lore.kernel.org/oe-kbuild-all/202609031938.ZvZZaRQy-lkp@intel.com/
---
 include/linux/entry-common.h |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/include/linux/entry-common.h
+++ b/include/linux/entry-common.h
@@ -102,7 +102,14 @@ static __always_inline long syscall_trac
 	if (unlikely(work & SYSCALL_WORK_SYSCALL_TRACEPOINT))
 		trace_syscall_enter(regs);
 
-	if (unlikely(audit_context()))
+	/*
+	 * The config check works around broken compilers which fail to
+	 * eliminate the dead code in case of CONFIG_AUDITSYSCALL=n as they
+	 * insist on creating a always false runtime condition based on
+	 * audit_context() which returns NULL in that case. The explicit
+	 * IS_ENABLED() check makes that madness go away.
+	 */
+	if (IS_ENABLED(CONFIG_AUDITSYSCALL) && unlikely(audit_context()))
 		syscall_enter_audit(regs);
 
 	return true;

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-09-05  8:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-03 11:35 include/linux/irq-entry-common.h:218: undefined reference to `syscall_enter_audit' kernel test robot
2026-09-03 20:03 ` Thomas Gleixner
2026-09-04 13:42   ` Philip Li
2026-09-04 22:40     ` Thomas Gleixner
2026-09-05  8:43       ` [PATCH] entry: Guard syscall_enter_audit() invocation with CONFIG_AUDITSYSCALL Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®