]> www.infradead.org Git - users/jedix/linux-maple.git/commit
x86/traps: Make exc_double_fault() consistently noreturn
authorJosh Poimboeuf <jpoimboe@kernel.org>
Fri, 14 Mar 2025 19:28:59 +0000 (12:28 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 17 Mar 2025 10:35:59 +0000 (11:35 +0100)
commit8085fcd78c1a3dbdf2278732579009d41ce0bc4e
tree178dc7bfde4f15900dc7d8b2d0e68b678a52f70f
parente20ab7d454ee8d1e0e8b9ff73a7c87e84c666b2f
x86/traps: Make exc_double_fault() consistently noreturn

The CONFIG_X86_ESPFIX64 version of exc_double_fault() can return to its
caller, but the !CONFIG_X86_ESPFIX64 version never does.  In the latter
case the compiler and/or objtool may consider it to be implicitly
noreturn.

However, due to the currently inflexible way objtool detects noreturns,
a function's noreturn status needs to be consistent across configs.

The current workaround for this issue is to suppress unreachable
warnings for exc_double_fault()'s callers.  Unfortunately that can
result in ORC coverage gaps and potentially worse issues like inert
static calls and silently disabled CPU mitigations.

Instead, prevent exc_double_fault() from ever being implicitly marked
noreturn by forcing a return behind a never-taken conditional.

Until a more integrated noreturn detection method exists, this is likely
the least objectionable workaround.

Fixes: 55eeab2a8a11 ("objtool: Ignore exc_double_fault() __noreturn warnings")
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Brendan Jackman <jackmanb@google.com>
Link: https://lore.kernel.org/r/d1f4026f8dc35d0de6cc61f2684e0cb6484009d1.1741975349.git.jpoimboe@kernel.org
arch/x86/kernel/traps.c
tools/objtool/check.c