Re: [PATCH] arm64: syscall: Ensure saved x0 is kept in-sync with tracer updates

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi Will,

kernel test robot noticed the following build errors:

[auto build test ERROR on linux-review/Yiqi-Sun/arm64-ptrace-use-live-x0-for-seccomp-and-audit-after-ptrace/20260815-210721]

url:    https://github.com/intel-lab-lkp/linux/commits/Will-Deacon/arm64-syscall-Ensure-saved-x0-is-kept-in-sync-with-tracer-updates/20260815-220235
base:   https://github.com/intel-lab-lkp/linux Yiqi-Sun/arm64-ptrace-use-live-x0-for-seccomp-and-audit-after-ptrace/20260815-210721
patch link:    https://lore.kernel.org/r/20260714143600.23853-1-will%40kernel.org
patch subject: [PATCH] arm64: syscall: Ensure saved x0 is kept in-sync with tracer updates
config: arm64-randconfig-001-20260820 (https://download.01.org/0day-ci/archive/20260820/[email protected]/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 935bfc708590c60147a79c7df145bb6e68b1d388)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260820/[email protected]/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
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

>> arch/arm64/kernel/ptrace.c:2461:13: error: conflicting types for 'update_syscall_orig_x0_after_ptrace'
    2461 | static void update_syscall_orig_x0_after_ptrace(struct pt_regs *regs)
         |             ^
   arch/arm64/kernel/ptrace.c:563:13: note: previous definition is here
     563 | static void update_syscall_orig_x0_after_ptrace(struct task_struct *target)
         |             ^
>> arch/arm64/kernel/ptrace.c:2490:39: error: incompatible pointer types passing 'struct pt_regs *' to parameter of type 'struct task_struct *' [-Wincompatible-pointer-types]
    2490 |                 update_syscall_orig_x0_after_ptrace(regs);
         |                                                     ^~~~
   arch/arm64/kernel/ptrace.c:563:69: note: passing argument to parameter 'target' here
     563 | static void update_syscall_orig_x0_after_ptrace(struct task_struct *target)
         |                                                                     ^
   arch/arm64/kernel/ptrace.c:2498:38: error: incompatible pointer types passing 'struct pt_regs *' to parameter of type 'struct task_struct *' [-Wincompatible-pointer-types]
    2498 |         update_syscall_orig_x0_after_ptrace(regs);
         |                                             ^~~~
   arch/arm64/kernel/ptrace.c:563:69: note: passing argument to parameter 'target' here
     563 | static void update_syscall_orig_x0_after_ptrace(struct task_struct *target)
         |                                                                     ^
   3 errors generated.


vim +/update_syscall_orig_x0_after_ptrace +2461 arch/arm64/kernel/ptrace.c

  2460	
> 2461	static void update_syscall_orig_x0_after_ptrace(struct pt_regs *regs)
  2462	{
  2463		/*
  2464		 * Keep orig_x0 authoritative so that seccomp (via
  2465		 * syscall_get_arguments()), audit and the restart path all see the same
  2466		 * first argument the syscall is dispatched with, even if it has been
  2467		 * updated by a tracer. Skip this for NO_SYSCALL (set either by the user
  2468		 * or the tracer), as regs[0] holds the return value (see the comment in
  2469		 * el0_svc_common()) and can be unwound using syscall_rollback().
  2470		 * For compat tasks, orig_r0 is provided directly through GPR index 17.
  2471		 */
  2472		if (!is_compat_task() && regs->syscallno != NO_SYSCALL)
  2473			regs->orig_x0 = regs->regs[0];
  2474	}
  2475	
  2476	int syscall_trace_enter(struct pt_regs *regs)
  2477	{
  2478		unsigned long flags = read_thread_flags();
  2479		int ret;
  2480	
  2481		if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {
  2482			ret = report_syscall_entry(regs);
  2483			if (ret || (flags & _TIF_SYSCALL_EMU))
  2484				return NO_SYSCALL;
  2485	
  2486			/*
  2487			 * Ensure ptrace changes to x0 are visible to seccomp
  2488			 * ptrace exits (SECCOMP_RET_TRACE).
  2489			 */
> 2490			update_syscall_orig_x0_after_ptrace(regs);
  2491		}
  2492	
  2493		/* Do the secure computing after ptrace; failures should be fast. */
  2494		if (secure_computing() == -1)
  2495			return NO_SYSCALL;
  2496	
  2497		/* Ensure seccomp updates to x0 are visible to audit. */
  2498		update_syscall_orig_x0_after_ptrace(regs);
  2499	
  2500		if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
  2501			trace_sys_enter(regs, regs->syscallno);
  2502	
  2503		audit_syscall_entry(regs->syscallno, regs->regs[0], regs->regs[1],
  2504				    regs->regs[2], regs->regs[3]);
  2505	
  2506		return regs->syscallno;
  2507	}
  2508	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.