]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
uprobes/x86: Return error from uprobe syscall when not called from trampoline
authorJiri Olsa <jolsa@kernel.org>
Fri, 5 Sep 2025 20:57:29 +0000 (22:57 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 15 Sep 2025 11:46:29 +0000 (13:46 +0200)
Currently uprobe syscall handles all errors with forcing SIGILL to current
process. As suggested by Andrii it'd be helpful for uprobe syscall detection
to return error value for the !in_uprobe_trampoline check.

This way we could just call uprobe syscall and based on return value we will
find out if the kernel has it.

Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Oleg Nesterov <oleg@redhat.com>
arch/x86/kernel/uprobes.c

index 0a8c0a4a54233a389817a11dc5bdb723358faa95..845aeaf36b8d2fc3740255f421833369e7651cf2 100644 (file)
@@ -810,7 +810,7 @@ SYSCALL_DEFINE0(uprobe)
 
        /* Allow execution only from uprobe trampolines. */
        if (!in_uprobe_trampoline(regs->ip))
-               goto sigill;
+               return -ENXIO;
 
        err = copy_from_user(&args, (void __user *)regs->sp, sizeof(args));
        if (err)