* [PATCH] x86/mm: fix objtool failure with KMSAN enabled
@ 2026-07-01 12:51 Dmitry Voytik
2026-07-01 13:18 ` Alexander Potapenko
[not found] ` <20260702025342.GJakXStrsCmIRnEwFD@fat_crate.local>
0 siblings, 2 replies; 7+ messages in thread
From: Dmitry Voytik @ 2026-07-01 12:51 UTC (permalink / raw)
To: Alexander Potapenko, Borislav Petkov, Peter Zijlstra,
Thomas Gleixner, Ingo Molnar, Dave Hansen, Josh Poimboeuf
Cc: Dmitry Vyukov, Andrew Morton, Ankur Arora, H . Peter Anvin,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Marco Elver, x86, linux-kernel, kasan-dev, linux-mm, llvm,
Dmitry Voytik
This patch fixes broken builds with defconfig + CONFIG_KMSAN +
CONFIG_DEBUG_INFO_*.
To reproduce the issue before the fix:
make mrproper
make LLVM=1 defconfig
./scripts/config -e CONFIG_KMSAN \
-e CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
make LLVM=1 olddefconfig
make LLVM=1 -j(nproc) vmlinux
...
LD vmlinux.o
vmlinux.o: warning: objtool: folio_zero_user+0x801: undefined stack state
vmlinux.o: error: objtool: folio_zero_user+0x801: unknown CFA base reg -1
make[2]: *** [scripts/Makefile.vmlinux_o:76: vmlinux.o] Error 255
objtool in verbose mode shows how the frame pointer is omitted:
make LLVM=1 OBJTOOL_VERBOSE=1 -j(nproc) vmlinux
...
b15a2c: folio_zero_user+0x7fc xor %eax,%eax
b15a2e: folio_zero_user+0x7fe mov %rcx,%rsp
b15a31: folio_zero_user+0x801 mov %r14,%rdi
b15a34: folio_zero_user+0x804 mov %rbx,%rcx
b15a37: folio_zero_user+0x807 call 0xb15a3c <__clear_pages_unrol
After the fix, the frame pointer is back:
b15a37: 31 c0 xor %eax,%eax
b15a39: 48 89 ec mov %rbp,%rsp
b15a3c: 4c 89 f7 mov %r14,%rdi
b15a3f: 48 89 d9 mov %rbx,%rcx
b15a42: e8 00 00 00 00 call b15a47 <folio_zero_user+0x817>
It seems the issue was introduced by
commit 54a6b89a3db2 ("x86/mm: simplify clear_page_*")
The actual fix is to revert the change how ASM_CALL_CONSTRAINT is
positioned.
Additionally, reintroduce asm_inline to prevent potential compiler
rejection of inlining.
Link: https://lore.kernel.org/CAAX90H2_RPnZL_dFYN7cQF6yt-wAweKKSx2=6e2aZ0kv+Pm+NQ@mail.gmail.com
Signed-off-by: Dmitry Voytik <voytikd@gmail.com>
---
arch/x86/include/asm/page_64.h | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h
index 1895c207f629..de8604f0a3a1 100644
--- a/arch/x86/include/asm/page_64.h
+++ b/arch/x86/include/asm/page_64.h
@@ -100,12 +100,13 @@ static inline void clear_pages(void *addr, unsigned int npages)
* __clear_pages_unrolled() are part of the inline asm register
* specification.
*/
- asm volatile(ALTERNATIVE_2("call __clear_pages_unrolled",
- "shrq $3, %%rcx; rep stosq", X86_FEATURE_REP_GOOD,
- "rep stosb", X86_FEATURE_ERMS)
- : "+c" (len), "+D" (addr), ASM_CALL_CONSTRAINT
- : "a" (0)
- : "cc", "memory");
+ asm_inline volatile(
+ ALTERNATIVE_2("call __clear_pages_unrolled",
+ "shrq $3, %%rcx; rep stosq", X86_FEATURE_REP_GOOD,
+ "rep stosb", X86_FEATURE_ERMS)
+ : ASM_CALL_CONSTRAINT, "+c"(len), "+D"(addr)
+ : "a"(0)
+ : "cc", "memory");
}
#define clear_pages clear_pages
--
2.54.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] x86/mm: fix objtool failure with KMSAN enabled
2026-07-01 12:51 [PATCH] x86/mm: fix objtool failure with KMSAN enabled Dmitry Voytik
@ 2026-07-01 13:18 ` Alexander Potapenko
2026-07-01 14:45 ` Dmitry Voytik
[not found] ` <20260702025342.GJakXStrsCmIRnEwFD@fat_crate.local>
1 sibling, 1 reply; 7+ messages in thread
From: Alexander Potapenko @ 2026-07-01 13:18 UTC (permalink / raw)
To: Dmitry Voytik, Thomas Gleixner
Cc: Borislav Petkov, Peter Zijlstra, Ingo Molnar, Dave Hansen,
Josh Poimboeuf, Dmitry Vyukov, Andrew Morton, Ankur Arora,
H . Peter Anvin, Nathan Chancellor, Nick Desaulniers,
Bill Wendling, Justin Stitt, Marco Elver, x86, linux-kernel,
kasan-dev, linux-mm, llvm
On Wed, Jul 1, 2026 at 2:51 PM Dmitry Voytik <voytikd@gmail.com> wrote:
>
> This patch fixes broken builds with defconfig + CONFIG_KMSAN +
> CONFIG_DEBUG_INFO_*.
>
> To reproduce the issue before the fix:
> make mrproper
> make LLVM=1 defconfig
> ./scripts/config -e CONFIG_KMSAN \
> -e CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
> make LLVM=1 olddefconfig
> make LLVM=1 -j(nproc) vmlinux
> ...
> LD vmlinux.o
> vmlinux.o: warning: objtool: folio_zero_user+0x801: undefined stack state
> vmlinux.o: error: objtool: folio_zero_user+0x801: unknown CFA base reg -1
> make[2]: *** [scripts/Makefile.vmlinux_o:76: vmlinux.o] Error 255
>
> objtool in verbose mode shows how the frame pointer is omitted:
> make LLVM=1 OBJTOOL_VERBOSE=1 -j(nproc) vmlinux
> ...
> b15a2c: folio_zero_user+0x7fc xor %eax,%eax
> b15a2e: folio_zero_user+0x7fe mov %rcx,%rsp
> b15a31: folio_zero_user+0x801 mov %r14,%rdi
> b15a34: folio_zero_user+0x804 mov %rbx,%rcx
> b15a37: folio_zero_user+0x807 call 0xb15a3c <__clear_pages_unrol
>
> After the fix, the frame pointer is back:
> b15a37: 31 c0 xor %eax,%eax
> b15a39: 48 89 ec mov %rbp,%rsp
> b15a3c: 4c 89 f7 mov %r14,%rdi
> b15a3f: 48 89 d9 mov %rbx,%rcx
> b15a42: e8 00 00 00 00 call b15a47 <folio_zero_user+0x817>
>
> It seems the issue was introduced by
> commit 54a6b89a3db2 ("x86/mm: simplify clear_page_*")
>
> The actual fix is to revert the change how ASM_CALL_CONSTRAINT is
> positioned.
> Additionally, reintroduce asm_inline to prevent potential compiler
> rejection of inlining.
>
> Link: https://lore.kernel.org/CAAX90H2_RPnZL_dFYN7cQF6yt-wAweKKSx2=6e2aZ0kv+Pm+NQ@mail.gmail.com
> Signed-off-by: Dmitry Voytik <voytikd@gmail.com>
Have you tried running KMSAN with this fix?
I tried running with the config that Thomas posted at
https://lore.kernel.org/all/87tsqjq3i3.ffs@fw13/
(https://tglx.de/~tglx/config.fail), and it still hangs for me.
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] x86/mm: fix objtool failure with KMSAN enabled
2026-07-01 13:18 ` Alexander Potapenko
@ 2026-07-01 14:45 ` Dmitry Voytik
2026-07-01 15:15 ` Alexander Potapenko
0 siblings, 1 reply; 7+ messages in thread
From: Dmitry Voytik @ 2026-07-01 14:45 UTC (permalink / raw)
To: Alexander Potapenko
Cc: Thomas Gleixner, Borislav Petkov, Peter Zijlstra, Ingo Molnar,
Dave Hansen, Josh Poimboeuf, Dmitry Vyukov, Andrew Morton,
Ankur Arora, H . Peter Anvin, Nathan Chancellor, Nick Desaulniers,
Bill Wendling, Justin Stitt, Marco Elver, x86, linux-kernel,
kasan-dev, linux-mm, llvm
Hi Alexander,
On Wed, Jul 1, 2026 at 3:18 PM Alexander Potapenko <glider@google.com> wrote:
>
> On Wed, Jul 1, 2026 at 2:51 PM Dmitry Voytik <voytikd@gmail.com> wrote:
> >
> > This patch fixes broken builds with defconfig + CONFIG_KMSAN +
> > CONFIG_DEBUG_INFO_*.
> >
> > To reproduce the issue before the fix:
> > make mrproper
> > make LLVM=1 defconfig
> > ./scripts/config -e CONFIG_KMSAN \
> > -e CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
> > make LLVM=1 olddefconfig
> > make LLVM=1 -j(nproc) vmlinux
> > ...
> > LD vmlinux.o
> > vmlinux.o: warning: objtool: folio_zero_user+0x801: undefined stack state
> > vmlinux.o: error: objtool: folio_zero_user+0x801: unknown CFA base reg -1
> > make[2]: *** [scripts/Makefile.vmlinux_o:76: vmlinux.o] Error 255
> >
> > objtool in verbose mode shows how the frame pointer is omitted:
> > make LLVM=1 OBJTOOL_VERBOSE=1 -j(nproc) vmlinux
> > ...
> > b15a2c: folio_zero_user+0x7fc xor %eax,%eax
> > b15a2e: folio_zero_user+0x7fe mov %rcx,%rsp
> > b15a31: folio_zero_user+0x801 mov %r14,%rdi
> > b15a34: folio_zero_user+0x804 mov %rbx,%rcx
> > b15a37: folio_zero_user+0x807 call 0xb15a3c <__clear_pages_unrol
> >
> > After the fix, the frame pointer is back:
> > b15a37: 31 c0 xor %eax,%eax
> > b15a39: 48 89 ec mov %rbp,%rsp
> > b15a3c: 4c 89 f7 mov %r14,%rdi
> > b15a3f: 48 89 d9 mov %rbx,%rcx
> > b15a42: e8 00 00 00 00 call b15a47 <folio_zero_user+0x817>
> >
> > It seems the issue was introduced by
> > commit 54a6b89a3db2 ("x86/mm: simplify clear_page_*")
> >
> > The actual fix is to revert the change how ASM_CALL_CONSTRAINT is
> > positioned.
> > Additionally, reintroduce asm_inline to prevent potential compiler
> > rejection of inlining.
> >
> > Link: https://lore.kernel.org/CAAX90H2_RPnZL_dFYN7cQF6yt-wAweKKSx2=6e2aZ0kv+Pm+NQ@mail.gmail.com
> > Signed-off-by: Dmitry Voytik <voytikd@gmail.com>
> Have you tried running KMSAN with this fix?
>
> I tried running with the config that Thomas posted at
> https://lore.kernel.org/all/87tsqjq3i3.ffs@fw13/
> (https://tglx.de/~tglx/config.fail), and it still hangs for me.
I only tested the fix with defconfig + CONFIG_KMSAN +
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT + olddefconfig.
qemu-system-x86_64 \
-kernel arch/x86/boot/bzImage \
-append "console=ttyS0" \
-nographic \
-m 8G -smp 4 \
-serial file:serial_output.log
Booting from ROM..
[ 0.000000] Linux version 7.1.0-14280-g3dd2bc904bda
(voyt@voyt-laptop-dell) (clang version 22.1.6, LLD 22.1.6) #2 SMP
PREEMPT_DYNAMIC Wed Jul 1 16:25:28 CEST 2026
...
[ 2.274314] Starting KernelMemorySanitizer
[ 2.274356] ATTENTION: KMSAN is a debugging tool! Do not use it on
production machines!
[ 2.357699] Dynamic Preempt: lazy
[ 2.390793] rcu: Preemptible hierarchical RCU implementation.
[ 2.391032] rcu: RCU event tracing is enabled.
[ 2.391256] rcu: RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4.
...
[ 53.009112] /dev/root: Can't open blockdev
[ 53.012357] VFS: Cannot open root device "" or unknown-block(0,0): error -6
[ 53.013186] Please append a correct "root=" boot option; here are
the available partitions:
...
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] x86/mm: fix objtool failure with KMSAN enabled
2026-07-01 14:45 ` Dmitry Voytik
@ 2026-07-01 15:15 ` Alexander Potapenko
0 siblings, 0 replies; 7+ messages in thread
From: Alexander Potapenko @ 2026-07-01 15:15 UTC (permalink / raw)
To: Dmitry Voytik
Cc: Thomas Gleixner, Borislav Petkov, Peter Zijlstra, Ingo Molnar,
Dave Hansen, Josh Poimboeuf, Dmitry Vyukov, Andrew Morton,
Ankur Arora, H . Peter Anvin, Nathan Chancellor, Nick Desaulniers,
Bill Wendling, Justin Stitt, Marco Elver, x86, linux-kernel,
kasan-dev, linux-mm, llvm
On Wed, Jul 1, 2026 at 4:45 PM Dmitry Voytik <voytikd@gmail.com> wrote:
>
> Hi Alexander,
>
> On Wed, Jul 1, 2026 at 3:18 PM Alexander Potapenko <glider@google.com> wrote:
> >
> > On Wed, Jul 1, 2026 at 2:51 PM Dmitry Voytik <voytikd@gmail.com> wrote:
> > >
> > > This patch fixes broken builds with defconfig + CONFIG_KMSAN +
> > > CONFIG_DEBUG_INFO_*.
> > >
> > > To reproduce the issue before the fix:
> > > make mrproper
> > > make LLVM=1 defconfig
> > > ./scripts/config -e CONFIG_KMSAN \
> > > -e CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
> > > make LLVM=1 olddefconfig
> > > make LLVM=1 -j(nproc) vmlinux
> > > ...
> > > LD vmlinux.o
> > > vmlinux.o: warning: objtool: folio_zero_user+0x801: undefined stack state
> > > vmlinux.o: error: objtool: folio_zero_user+0x801: unknown CFA base reg -1
> > > make[2]: *** [scripts/Makefile.vmlinux_o:76: vmlinux.o] Error 255
> > >
> > > objtool in verbose mode shows how the frame pointer is omitted:
> > > make LLVM=1 OBJTOOL_VERBOSE=1 -j(nproc) vmlinux
> > > ...
> > > b15a2c: folio_zero_user+0x7fc xor %eax,%eax
> > > b15a2e: folio_zero_user+0x7fe mov %rcx,%rsp
> > > b15a31: folio_zero_user+0x801 mov %r14,%rdi
> > > b15a34: folio_zero_user+0x804 mov %rbx,%rcx
> > > b15a37: folio_zero_user+0x807 call 0xb15a3c <__clear_pages_unrol
> > >
> > > After the fix, the frame pointer is back:
> > > b15a37: 31 c0 xor %eax,%eax
> > > b15a39: 48 89 ec mov %rbp,%rsp
> > > b15a3c: 4c 89 f7 mov %r14,%rdi
> > > b15a3f: 48 89 d9 mov %rbx,%rcx
> > > b15a42: e8 00 00 00 00 call b15a47 <folio_zero_user+0x817>
> > >
> > > It seems the issue was introduced by
> > > commit 54a6b89a3db2 ("x86/mm: simplify clear_page_*")
> > >
> > > The actual fix is to revert the change how ASM_CALL_CONSTRAINT is
> > > positioned.
> > > Additionally, reintroduce asm_inline to prevent potential compiler
> > > rejection of inlining.
> > >
> > > Link: https://lore.kernel.org/CAAX90H2_RPnZL_dFYN7cQF6yt-wAweKKSx2=6e2aZ0kv+Pm+NQ@mail.gmail.com
> > > Signed-off-by: Dmitry Voytik <voytikd@gmail.com>
> > Have you tried running KMSAN with this fix?
> >
> > I tried running with the config that Thomas posted at
> > https://lore.kernel.org/all/87tsqjq3i3.ffs@fw13/
> > (https://tglx.de/~tglx/config.fail), and it still hangs for me.
>
> I only tested the fix with defconfig + CONFIG_KMSAN +
> CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT + olddefconfig.
>
> qemu-system-x86_64 \
> -kernel arch/x86/boot/bzImage \
> -append "console=ttyS0" \
> -nographic \
> -m 8G -smp 4 \
> -serial file:serial_output.log
>
> Booting from ROM..
> [ 0.000000] Linux version 7.1.0-14280-g3dd2bc904bda
> (voyt@voyt-laptop-dell) (clang version 22.1.6, LLD 22.1.6) #2 SMP
> PREEMPT_DYNAMIC Wed Jul 1 16:25:28 CEST 2026
> ...
In fact I think the hangs are being caused by CONFIG_UNWINDER_ORC=y,
sorry for the noise.
^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <20260702025342.GJakXStrsCmIRnEwFD@fat_crate.local>]
end of thread, other threads:[~2026-07-03 10:34 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-01 12:51 [PATCH] x86/mm: fix objtool failure with KMSAN enabled Dmitry Voytik
2026-07-01 13:18 ` Alexander Potapenko
2026-07-01 14:45 ` Dmitry Voytik
2026-07-01 15:15 ` Alexander Potapenko
[not found] ` <20260702025342.GJakXStrsCmIRnEwFD@fat_crate.local>
[not found] ` <CAAX90H0V-=Gy1FyBT9qop2=RvhBxbOPLu6+DYpPH2pTehT=nRw@mail.gmail.com>
[not found] ` <20260702111550.GH751831@noisy.programming.kicks-ass.net>
2026-07-02 19:46 ` Thomas Gleixner
2026-07-02 20:05 ` Thomas Gleixner
2026-07-03 10:34 ` Dmitry Voytik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox