BUG: KASAN: vmalloc-out-of-bounds in copy_to_kernel_nofault+0xd8/0x1c8 (v6.13-rc6, PowerMac G4)
Erhard Furtner
erhard_f at mailbox.org
Mon Feb 3 00:25:52 AEDT 2025
On Sun, 2 Feb 2025 09:44:20 +0100
Christophe Leroy <christophe.leroy at csgroup.eu> wrote:
> This time the problem is a mixture of commit 465cabc97b42
> ("powerpc/code-patching: introduce patch_instructions()") and commit
> c28c15b6d28a ("powerpc/code-patching: Use temporary mm for Radix MMU")
> which is revealed by commit e4137f08816b ("mm, kasan, kmsan: instrument
> copy_from/to_kernel_nofault")
>
> Commit c28c15b6d28a is inspired by commit b3fd8e83ada0
> ("x86/alternatives: Use temporary mm for text poking") but misses the
> kasan_disable_current() / kasan_enable_current() sequence.
>
> Was not necessary because __patch_mem() is not instrumented. But commit
> 465cabc97b42 added use of copy_to_kernel_nofault() which is now
> instrumented.
>
> The problem is that commit c28c15b6d28a makes use of a special memory
> area which is not kernel memory and it doesn't have any matching KASAN
> shadow area. And because it is located below TASK_SIZE, in addition
> kasan sees it as user memory.
>
> Can you try the change below ?
>
> diff --git a/arch/powerpc/lib/code-patching.c
> b/arch/powerpc/lib/code-patching.c
> index 8a378fc19074..f84e0337cc02 100644
> --- a/arch/powerpc/lib/code-patching.c
> +++ b/arch/powerpc/lib/code-patching.c
> @@ -493,7 +493,9 @@ static int __do_patch_instructions_mm(u32 *addr, u32
> *code, size_t len, bool rep
>
> orig_mm = start_using_temp_mm(patching_mm);
>
> + kasan_disable_current();
> err = __patch_instructions(patch_addr, code, len, repeat_instr);
> + kasan_enable_current();
>
> /* context synchronisation performed by __patch_instructions */
> stop_using_temp_mm(patching_mm, orig_mm);
>
Thanks! With this patch applied the KASAN hit is gone and I got no further KASAN hits on my Talos II during boot. Applied both patches on top of v6.13.1.
Regards,
Erhard
More information about the Linuxppc-dev
mailing list