On Sun, Mar 13, 2022 at 09:52:14AM +0100, Peter Zijlstra wrote: > > and: > > vmlinux.o: warning: objtool: ksys_unshare()+0x626: unreachable instruction > > which stays even after make clean. > > Humm, I shall have to dig out gcc-8.5 then. Ha!, I could reproduce using the bpf-selftest .config for x86_64. Fixing that (the __noreturn on __invalid_creds) immediately yields another one on that .config in asm_exc_double_fault. And a missing ENDBR if you don't build 32bit compat. I'll go clean up ... --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -551,6 +551,14 @@ SYM_CODE_START(\asmsym) movq $-1, ORIG_RAX(%rsp) /* no syscall to restart */ call \cfunc + /* + * For some configurations exc_double_fault() is a noreturn + */ +1: + .pushsection .discard.reachable + .long 1b - . + .popsection + jmp paranoid_exit _ASM_NOKPROBE(\asmsym) @@ -1440,6 +1448,7 @@ SYM_CODE_END(asm_exc_nmi) */ SYM_CODE_START(ignore_sysret) UNWIND_HINT_EMPTY + ENDBR mov $-ENOSYS, %eax sysretl SYM_CODE_END(ignore_sysret) diff --git a/include/linux/cred.h b/include/linux/cred.h index fcbc6885cc09..9ed9232af934 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h @@ -176,7 +176,7 @@ extern int set_cred_ucounts(struct cred *); * check for validity of credentials */ #ifdef CONFIG_DEBUG_CREDENTIALS -extern void __invalid_creds(const struct cred *, const char *, unsigned); +extern void __noreturn __invalid_creds(const struct cred *, const char *, unsigned); extern void __validate_process_creds(struct task_struct *, const char *, unsigned); diff --git a/kernel/cred.c b/kernel/cred.c index 933155c96922..e10c15f51c1f 100644 --- a/kernel/cred.c +++ b/kernel/cred.c @@ -870,7 +870,7 @@ static void dump_invalid_creds(const struct cred *cred, const char *label, /* * report use of invalid credentials */ -void __invalid_creds(const struct cred *cred, const char *file, unsigned line) +void __noreturn __invalid_creds(const struct cred *cred, const char *file, unsigned line) { printk(KERN_ERR "CRED: Invalid credentials\n"); printk(KERN_ERR "CRED: At %s:%u\n", file, line);