* kasan-for-arm32
@ 2022-11-09 11:14 李文杰
2022-11-10 9:51 ` kasan-for-arm32 Linus Walleij
0 siblings, 1 reply; 8+ messages in thread
From: 李文杰 @ 2022-11-09 11:14 UTC (permalink / raw)
To: Linus Walleij; +Cc: linux-arm-kernel
Dear Linus Walleij,
1. I know why my machine crash after porting the patch.
2. Because the kernel access the vmalloc region, which not shadowed.
3. Now I found at least two places where used vmalloc region:
1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
4. could I add the vmalloc to shadow memory region?
Thanks very much.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: kasan-for-arm32
2022-11-09 11:14 kasan-for-arm32 李文杰
@ 2022-11-10 9:51 ` Linus Walleij
2022-11-10 16:17 ` [External] kasan-for-arm32 李文杰
0 siblings, 1 reply; 8+ messages in thread
From: Linus Walleij @ 2022-11-10 9:51 UTC (permalink / raw)
To: 李文杰; +Cc: linux-arm-kernel, Lecopzer Chen
On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
[Contex: porting kasan to kernel v5.4]
> 1. I know why my machine crash after porting the patch.
> 2. Because the kernel access the vmalloc region, which not shadowed.
> 3. Now I found at least two places where used vmalloc region:
> 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
> 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
> 4. could I add the vmalloc to shadow memory region?
I think you need to backport at least the following patches from upstream:
823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
Both from Lecopzer Chen.
Yours,
Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [External] Re: kasan-for-arm32
2022-11-10 9:51 ` kasan-for-arm32 Linus Walleij
@ 2022-11-10 16:17 ` 李文杰
2022-11-10 22:43 ` Florian Fainelli
0 siblings, 1 reply; 8+ messages in thread
From: 李文杰 @ 2022-11-10 16:17 UTC (permalink / raw)
To: Linus Walleij; +Cc: linux-arm-kernel, Lecopzer Chen
Dear Linus Walleij,
Thanks for reply,
1. I know why my kernel-5.4's vmalloc region not shadowed already,
because the CONFIG_ENABLE_VMALLOC_SAVING=y was enabled.
2. But I could not find it in mainline,so I guess it was added by Qualcomm.
3. Once it was enabled, the VMALLOC_START and VMALLOC_END will be
invalid.The code is some like below:
553 #ifdef CONFIG_ENABLE_VMALLOC_SAVING
554 print_vmalloc_lowmem_info();
555 #else
556 pr_notice(
557 " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
558 " lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n",
559 MLM(VMALLOC_START, VMALLOC_END),
560 MLM(PAGE_OFFSET, (unsigned long)high_memory));
561 #endif
4. Instead, the vmalloc region follows lowmem region one by one, so my
kernel virtual memory layout as below:
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc80000 - 0xfff00000 (2560 kB)
[ 0.000000] vmalloc : 0xf8500000 - 0xff800000 ( 115 MB) //highmem
[ 0.000000] lowmem : 0xe1f00000 - 0xf8500000 ( 358 MB)
[ 0.000000] vmalloc : 0xe0e00000 - 0xe1f00000 ( 17 MB)
[ 0.000000] lowmem : 0xe0100000 - 0xe0e00000 ( 13 MB)
[ 0.000000] vmalloc : 0xe0000000 - 0xe0100000 ( 1 MB)
[ 0.000000] lowmem : 0xcff17000 - 0xe0000000 ( 256 MB)
[ 0.000000] vmalloc : 0xcab00000 - 0xcff17000 ( 84 MB)
[ 0.000000] lowmem : 0xc6300000 - 0xcab00000 ( 72 MB)
[ 0.000000] vmalloc : 0xc5fff000 - 0xc6300000 ( 3 MB)
[ 0.000000] lowmem : 0xc5f10000 - 0xc5fff000 ( 0 MB)
[ 0.000000] vmalloc : 0xc5a00000 - 0xc5f10000 ( 5 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xc5a00000 ( 90 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (27616 kB)
[ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
[ 0.000000] .data : 0x(ptrval) - 0x(ptrval) (2221 kB)
[ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (8100 kB)
5. Now my solution is that, add all vmalloc regions above except
highmem to the mapping. Then my machine bringup successfully.
arch/arm/mm/kasan_init.c -> kasan_init() -> create_mapping().
6. Next I will continue to try and enjoy your kasan-for-arm32 patch in
my machine.
Thanks again dear Linus Walleij and Lecopzer.chen,
Linus Walleij <linus.walleij@linaro.org> 于2022年11月10日周四 17:51写道:
>
> On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
>
> [Contex: porting kasan to kernel v5.4]
>
> > 1. I know why my machine crash after porting the patch.
> > 2. Because the kernel access the vmalloc region, which not shadowed.
> > 3. Now I found at least two places where used vmalloc region:
> > 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
> > 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
> > 4. could I add the vmalloc to shadow memory region?
>
> I think you need to backport at least the following patches from upstream:
>
> 823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
> 565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
>
> Both from Lecopzer Chen.
>
> Yours,
> Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [External] Re: kasan-for-arm32
2022-11-10 16:17 ` [External] kasan-for-arm32 李文杰
@ 2022-11-10 22:43 ` Florian Fainelli
2022-11-11 7:53 ` 李文杰
0 siblings, 1 reply; 8+ messages in thread
From: Florian Fainelli @ 2022-11-10 22:43 UTC (permalink / raw)
To: 李文杰, Linus Walleij; +Cc: linux-arm-kernel, Lecopzer Chen
On 11/10/22 08:17, 李文杰 wrote:
> Dear Linus Walleij,
>
> Thanks for reply,
>
> 1. I know why my kernel-5.4's vmalloc region not shadowed already,
> because the CONFIG_ENABLE_VMALLOC_SAVING=y was enabled.
>
> 2. But I could not find it in mainline,so I guess it was added by Qualcomm.
>
> 3. Once it was enabled, the VMALLOC_START and VMALLOC_END will be
> invalid.The code is some like below:
>
> 553 #ifdef CONFIG_ENABLE_VMALLOC_SAVING
> 554 print_vmalloc_lowmem_info();
> 555 #else
> 556 pr_notice(
> 557 " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
> 558 " lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n",
> 559 MLM(VMALLOC_START, VMALLOC_END),
> 560 MLM(PAGE_OFFSET, (unsigned long)high_memory));
> 561 #endif
>
> 4. Instead, the vmalloc region follows lowmem region one by one, so my
> kernel virtual memory layout as below:
You seem to have the intermix patch from Qualcomm:
https://lkml.indiana.edu/hypermail/linux/kernel/1401.0/00518.html
> [ 0.000000] Virtual kernel memory layout:
> [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
> [ 0.000000] fixmap : 0xffc80000 - 0xfff00000 (2560 kB)
> [ 0.000000] vmalloc : 0xf8500000 - 0xff800000 ( 115 MB) //highmem
> [ 0.000000] lowmem : 0xe1f00000 - 0xf8500000 ( 358 MB)
> [ 0.000000] vmalloc : 0xe0e00000 - 0xe1f00000 ( 17 MB)
> [ 0.000000] lowmem : 0xe0100000 - 0xe0e00000 ( 13 MB)
> [ 0.000000] vmalloc : 0xe0000000 - 0xe0100000 ( 1 MB)
> [ 0.000000] lowmem : 0xcff17000 - 0xe0000000 ( 256 MB)
> [ 0.000000] vmalloc : 0xcab00000 - 0xcff17000 ( 84 MB)
> [ 0.000000] lowmem : 0xc6300000 - 0xcab00000 ( 72 MB)
> [ 0.000000] vmalloc : 0xc5fff000 - 0xc6300000 ( 3 MB)
> [ 0.000000] lowmem : 0xc5f10000 - 0xc5fff000 ( 0 MB)
> [ 0.000000] vmalloc : 0xc5a00000 - 0xc5f10000 ( 5 MB)
> [ 0.000000] lowmem : 0xc0000000 - 0xc5a00000 ( 90 MB)
> [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
> [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
> [ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (27616 kB)
> [ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
> [ 0.000000] .data : 0x(ptrval) - 0x(ptrval) (2221 kB)
> [ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (8100 kB)
>
> 5. Now my solution is that, add all vmalloc regions above except
> highmem to the mapping. Then my machine bringup successfully.
> arch/arm/mm/kasan_init.c -> kasan_init() -> create_mapping().
>
> 6. Next I will continue to try and enjoy your kasan-for-arm32 patch in
> my machine.
>
> Thanks again dear Linus Walleij and Lecopzer.chen,
>
> Linus Walleij <linus.walleij@linaro.org> 于2022年11月10日周四 17:51写道:
>>
>> On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
>>
>> [Contex: porting kasan to kernel v5.4]
>>
>>> 1. I know why my machine crash after porting the patch.
>>> 2. Because the kernel access the vmalloc region, which not shadowed.
>>> 3. Now I found at least two places where used vmalloc region:
>>> 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
>>> 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
>>> 4. could I add the vmalloc to shadow memory region?
>>
>> I think you need to backport at least the following patches from upstream:
>>
>> 823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
>> 565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
>>
>> Both from Lecopzer Chen.
>>
>> Yours,
>> Linus Walleij
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
Florian
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [External] Re: kasan-for-arm32
2022-11-10 22:43 ` Florian Fainelli
@ 2022-11-11 7:53 ` 李文杰
2022-11-28 7:06 ` 李文杰
2022-12-18 10:46 ` 李文杰
0 siblings, 2 replies; 8+ messages in thread
From: 李文杰 @ 2022-11-11 7:53 UTC (permalink / raw)
To: Florian Fainelli; +Cc: Linus Walleij, linux-arm-kernel, Lecopzer Chen
Dear Florian Fainelli,
1. Thanks for reply, Yes, it looks like that. And I will talk about it
with Qualcomm further.
2. Now Linus Walleij' kasan-for-arm32 patch has worked on my machine
successfully, and it can report slab UAF and slab OOB now.
3. But it does not work on out-of-bounds accesses to stack or global
variables now. I notice that the feature depend on >=gcc 5.0, but my
compiler is clang 11.0.2.
Florian Fainelli <f.fainelli@gmail.com> 于2022年11月11日周五 06:43写道:
>
> On 11/10/22 08:17, 李文杰 wrote:
> > Dear Linus Walleij,
> >
> > Thanks for reply,
> >
> > 1. I know why my kernel-5.4's vmalloc region not shadowed already,
> > because the CONFIG_ENABLE_VMALLOC_SAVING=y was enabled.
> >
> > 2. But I could not find it in mainline,so I guess it was added by Qualcomm.
> >
> > 3. Once it was enabled, the VMALLOC_START and VMALLOC_END will be
> > invalid.The code is some like below:
> >
> > 553 #ifdef CONFIG_ENABLE_VMALLOC_SAVING
> > 554 print_vmalloc_lowmem_info();
> > 555 #else
> > 556 pr_notice(
> > 557 " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
> > 558 " lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n",
> > 559 MLM(VMALLOC_START, VMALLOC_END),
> > 560 MLM(PAGE_OFFSET, (unsigned long)high_memory));
> > 561 #endif
> >
> > 4. Instead, the vmalloc region follows lowmem region one by one, so my
> > kernel virtual memory layout as below:
>
> You seem to have the intermix patch from Qualcomm:
>
> https://lkml.indiana.edu/hypermail/linux/kernel/1401.0/00518.html
>
> > [ 0.000000] Virtual kernel memory layout:
> > [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
> > [ 0.000000] fixmap : 0xffc80000 - 0xfff00000 (2560 kB)
> > [ 0.000000] vmalloc : 0xf8500000 - 0xff800000 ( 115 MB) //highmem
> > [ 0.000000] lowmem : 0xe1f00000 - 0xf8500000 ( 358 MB)
> > [ 0.000000] vmalloc : 0xe0e00000 - 0xe1f00000 ( 17 MB)
> > [ 0.000000] lowmem : 0xe0100000 - 0xe0e00000 ( 13 MB)
> > [ 0.000000] vmalloc : 0xe0000000 - 0xe0100000 ( 1 MB)
> > [ 0.000000] lowmem : 0xcff17000 - 0xe0000000 ( 256 MB)
> > [ 0.000000] vmalloc : 0xcab00000 - 0xcff17000 ( 84 MB)
> > [ 0.000000] lowmem : 0xc6300000 - 0xcab00000 ( 72 MB)
> > [ 0.000000] vmalloc : 0xc5fff000 - 0xc6300000 ( 3 MB)
> > [ 0.000000] lowmem : 0xc5f10000 - 0xc5fff000 ( 0 MB)
> > [ 0.000000] vmalloc : 0xc5a00000 - 0xc5f10000 ( 5 MB)
> > [ 0.000000] lowmem : 0xc0000000 - 0xc5a00000 ( 90 MB)
> > [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
> > [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
> > [ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (27616 kB)
> > [ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
> > [ 0.000000] .data : 0x(ptrval) - 0x(ptrval) (2221 kB)
> > [ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (8100 kB)
> >
> > 5. Now my solution is that, add all vmalloc regions above except
> > highmem to the mapping. Then my machine bringup successfully.
> > arch/arm/mm/kasan_init.c -> kasan_init() -> create_mapping().
> >
> > 6. Next I will continue to try and enjoy your kasan-for-arm32 patch in
> > my machine.
> >
> > Thanks again dear Linus Walleij and Lecopzer.chen,
> >
> > Linus Walleij <linus.walleij@linaro.org> 于2022年11月10日周四 17:51写道:
> >>
> >> On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
> >>
> >> [Contex: porting kasan to kernel v5.4]
> >>
> >>> 1. I know why my machine crash after porting the patch.
> >>> 2. Because the kernel access the vmalloc region, which not shadowed.
> >>> 3. Now I found at least two places where used vmalloc region:
> >>> 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
> >>> 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
> >>> 4. could I add the vmalloc to shadow memory region?
> >>
> >> I think you need to backport at least the following patches from upstream:
> >>
> >> 823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
> >> 565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
> >>
> >> Both from Lecopzer Chen.
> >>
> >> Yours,
> >> Linus Walleij
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
> --
> Florian
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [External] Re: kasan-for-arm32
2022-11-11 7:53 ` 李文杰
@ 2022-11-28 7:06 ` 李文杰
2022-12-18 10:46 ` 李文杰
1 sibling, 0 replies; 8+ messages in thread
From: 李文杰 @ 2022-11-28 7:06 UTC (permalink / raw)
To: Florian Fainelli; +Cc: Linus Walleij, linux-arm-kernel, Lecopzer Chen
Dear All:
1. Now I met a problem that the kasan-for-arm32 could not check global
variable OOB;
2. For example , I define a global array g_test_array[8] = "1234567",
and g_test_array[16]='A'. But it couldn't kasan report bug.
3. I have disassembled the vmlinux, and I am sure that __asan_store1()
was inserted before memory access to g_test_array[16]. But the shadow
memory is zero.
4. More I found that g_test_array[8] has no redzone, it seems that
__asan_register_globals() was not called.
could anyone help me? Thanks very much,,
李文杰 <liwenjie.liwenjie@bytedance.com> 于2022年11月11日周五 15:53写道:
>
> Dear Florian Fainelli,
>
> 1. Thanks for reply, Yes, it looks like that. And I will talk about it
> with Qualcomm further.
>
> 2. Now Linus Walleij' kasan-for-arm32 patch has worked on my machine
> successfully, and it can report slab UAF and slab OOB now.
>
> 3. But it does not work on out-of-bounds accesses to stack or global
> variables now. I notice that the feature depend on >=gcc 5.0, but my
> compiler is clang 11.0.2.
>
> Florian Fainelli <f.fainelli@gmail.com> 于2022年11月11日周五 06:43写道:
> >
> > On 11/10/22 08:17, 李文杰 wrote:
> > > Dear Linus Walleij,
> > >
> > > Thanks for reply,
> > >
> > > 1. I know why my kernel-5.4's vmalloc region not shadowed already,
> > > because the CONFIG_ENABLE_VMALLOC_SAVING=y was enabled.
> > >
> > > 2. But I could not find it in mainline,so I guess it was added by Qualcomm.
> > >
> > > 3. Once it was enabled, the VMALLOC_START and VMALLOC_END will be
> > > invalid.The code is some like below:
> > >
> > > 553 #ifdef CONFIG_ENABLE_VMALLOC_SAVING
> > > 554 print_vmalloc_lowmem_info();
> > > 555 #else
> > > 556 pr_notice(
> > > 557 " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
> > > 558 " lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n",
> > > 559 MLM(VMALLOC_START, VMALLOC_END),
> > > 560 MLM(PAGE_OFFSET, (unsigned long)high_memory));
> > > 561 #endif
> > >
> > > 4. Instead, the vmalloc region follows lowmem region one by one, so my
> > > kernel virtual memory layout as below:
> >
> > You seem to have the intermix patch from Qualcomm:
> >
> > https://lkml.indiana.edu/hypermail/linux/kernel/1401.0/00518.html
> >
> > > [ 0.000000] Virtual kernel memory layout:
> > > [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
> > > [ 0.000000] fixmap : 0xffc80000 - 0xfff00000 (2560 kB)
> > > [ 0.000000] vmalloc : 0xf8500000 - 0xff800000 ( 115 MB) //highmem
> > > [ 0.000000] lowmem : 0xe1f00000 - 0xf8500000 ( 358 MB)
> > > [ 0.000000] vmalloc : 0xe0e00000 - 0xe1f00000 ( 17 MB)
> > > [ 0.000000] lowmem : 0xe0100000 - 0xe0e00000 ( 13 MB)
> > > [ 0.000000] vmalloc : 0xe0000000 - 0xe0100000 ( 1 MB)
> > > [ 0.000000] lowmem : 0xcff17000 - 0xe0000000 ( 256 MB)
> > > [ 0.000000] vmalloc : 0xcab00000 - 0xcff17000 ( 84 MB)
> > > [ 0.000000] lowmem : 0xc6300000 - 0xcab00000 ( 72 MB)
> > > [ 0.000000] vmalloc : 0xc5fff000 - 0xc6300000 ( 3 MB)
> > > [ 0.000000] lowmem : 0xc5f10000 - 0xc5fff000 ( 0 MB)
> > > [ 0.000000] vmalloc : 0xc5a00000 - 0xc5f10000 ( 5 MB)
> > > [ 0.000000] lowmem : 0xc0000000 - 0xc5a00000 ( 90 MB)
> > > [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
> > > [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
> > > [ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (27616 kB)
> > > [ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
> > > [ 0.000000] .data : 0x(ptrval) - 0x(ptrval) (2221 kB)
> > > [ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (8100 kB)
> > >
> > > 5. Now my solution is that, add all vmalloc regions above except
> > > highmem to the mapping. Then my machine bringup successfully.
> > > arch/arm/mm/kasan_init.c -> kasan_init() -> create_mapping().
> > >
> > > 6. Next I will continue to try and enjoy your kasan-for-arm32 patch in
> > > my machine.
> > >
> > > Thanks again dear Linus Walleij and Lecopzer.chen,
> > >
> > > Linus Walleij <linus.walleij@linaro.org> 于2022年11月10日周四 17:51写道:
> > >>
> > >> On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
> > >>
> > >> [Contex: porting kasan to kernel v5.4]
> > >>
> > >>> 1. I know why my machine crash after porting the patch.
> > >>> 2. Because the kernel access the vmalloc region, which not shadowed.
> > >>> 3. Now I found at least two places where used vmalloc region:
> > >>> 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
> > >>> 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
> > >>> 4. could I add the vmalloc to shadow memory region?
> > >>
> > >> I think you need to backport at least the following patches from upstream:
> > >>
> > >> 823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
> > >> 565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
> > >>
> > >> Both from Lecopzer Chen.
> > >>
> > >> Yours,
> > >> Linus Walleij
> > >
> > > _______________________________________________
> > > linux-arm-kernel mailing list
> > > linux-arm-kernel@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> >
> > --
> > Florian
> >
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [External] Re: kasan-for-arm32
2022-11-11 7:53 ` 李文杰
2022-11-28 7:06 ` 李文杰
@ 2022-12-18 10:46 ` 李文杰
1 sibling, 0 replies; 8+ messages in thread
From: 李文杰 @ 2022-12-18 10:46 UTC (permalink / raw)
To: Linus Walleij, Florian Fainelli, Lecopzer Chen, linux-arm-kernel
Dear all:
1. I have successfully used kasan-for-arm32 on my arm32, by replacing
clang to gcc 6.3.1 which support global and stack OOB;
2. With gcc6.3.1 + kasan,now it could kasan report for global
OOB、stack OOB、slub OOB;
3. But with gcc6.3.1 + kasan,I have met some problem also,which cause
the keymaster not found;The problem will cause the userdata partition
could not mounted;
[ 43.219265] init: processing action (late-fs) from
(/vendor/etc/init/hw/init.target.rc:65)
[ 43.245367] init:
start_waiting_for_property("hwservicemanager.ready", "true"): already
set
[ 43.277716] init: starting service 'wait_for_keymaster'...
[ 43.330537] init: SVC_EXEC service 'wait_for_keymaster' pid 349
(uid 0 gid 0+1 context default) started; waiting...
[ 43.355115] init: Command 'exec_start wait_for_keymaster'
action=late-fs (/vendor/etc/init/hw/init.target.rc:67) took 100ms and
succeeded
[ 43.487199] wait_for_keymaster: Waiting for Keymaster device
[ 43.518322] init: Control message: Could not find
'android.hardware.keymaster@4.0::IKeymasterDevice/default' for
ctl.interface_start from pid: 306 (/system/bin/hwservicemanager)
[ 43.549725] HidlServiceManagement: getService: Trying again for
android.hardware.keymaster@4.0::IKeymasterDevice/default...
[ 43.615453] init: Control message: Could not find
'android.hardware.keymaster@4.0::IKeymasterDevice/default' for
ctl.interface_start from pid: 306 (/system/bin/hwservicemanager)
4. Clang+kasan is ok;gcc + (disable kasan) is ok also;the normal log
is as below:
[ 22.177009] init: processing action (late-fs) from
(/vendor/etc/init/hw/init.target.rc:65)
[ 22.185916] init:
start_waiting_for_property("hwservicemanager.ready", "true"): already
set
[ 22.195540] init: starting service 'wait_for_keymaster'...
[ 22.206863] init: SVC_EXEC service 'wait_for_keymaster' pid 388
(uid 0 gid 0+1 context default) started; waiting...
[ 22.247715] wait_for_keymaster: Waiting for Keymaster device
[ 22.261559] wait_for_keymaster: List of Keymaster HALs found:
[ 22.268278] wait_for_keymaster: Keymaster HAL #1: Keymaster HAL: 4
from QTI SecurityLevel: TRUSTED_ENVIRONMENT HAL:
android.hardware.keymaster@4.1::IKeymasterDevice/default
[ 22.300876] wait_for_keymaster: Using Keymaster HAL: 4 from QTI for
encryption. Security level: TRUSTED_ENVIRONMENT, HAL:
android.hardware.keymaster@4.1::IKeymasterDevice/default
[ 22.317536] wait_for_keymaster: Keymaster device ready
[ 22.327668] init: Service 'wait_for_keymaster' (pid 388) exited
with status 0 waiting took 0.123000 seconds
[ 22.337870] init: Sending signal 9 to service 'wait_for_keymaster'
(pid 388) process group...
5. I don't know why, Could someone help me?Thanks very much.
李文杰 <liwenjie.liwenjie@bytedance.com> 于2022年11月11日周五 15:53写道:
>
> Dear Florian Fainelli,
>
> 1. Thanks for reply, Yes, it looks like that. And I will talk about it
> with Qualcomm further.
>
> 2. Now Linus Walleij' kasan-for-arm32 patch has worked on my machine
> successfully, and it can report slab UAF and slab OOB now.
>
> 3. But it does not work on out-of-bounds accesses to stack or global
> variables now. I notice that the feature depend on >=gcc 5.0, but my
> compiler is clang 11.0.2.
>
> Florian Fainelli <f.fainelli@gmail.com> 于2022年11月11日周五 06:43写道:
> >
> > On 11/10/22 08:17, 李文杰 wrote:
> > > Dear Linus Walleij,
> > >
> > > Thanks for reply,
> > >
> > > 1. I know why my kernel-5.4's vmalloc region not shadowed already,
> > > because the CONFIG_ENABLE_VMALLOC_SAVING=y was enabled.
> > >
> > > 2. But I could not find it in mainline,so I guess it was added by Qualcomm.
> > >
> > > 3. Once it was enabled, the VMALLOC_START and VMALLOC_END will be
> > > invalid.The code is some like below:
> > >
> > > 553 #ifdef CONFIG_ENABLE_VMALLOC_SAVING
> > > 554 print_vmalloc_lowmem_info();
> > > 555 #else
> > > 556 pr_notice(
> > > 557 " vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
> > > 558 " lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n",
> > > 559 MLM(VMALLOC_START, VMALLOC_END),
> > > 560 MLM(PAGE_OFFSET, (unsigned long)high_memory));
> > > 561 #endif
> > >
> > > 4. Instead, the vmalloc region follows lowmem region one by one, so my
> > > kernel virtual memory layout as below:
> >
> > You seem to have the intermix patch from Qualcomm:
> >
> > https://lkml.indiana.edu/hypermail/linux/kernel/1401.0/00518.html
> >
> > > [ 0.000000] Virtual kernel memory layout:
> > > [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
> > > [ 0.000000] fixmap : 0xffc80000 - 0xfff00000 (2560 kB)
> > > [ 0.000000] vmalloc : 0xf8500000 - 0xff800000 ( 115 MB) //highmem
> > > [ 0.000000] lowmem : 0xe1f00000 - 0xf8500000 ( 358 MB)
> > > [ 0.000000] vmalloc : 0xe0e00000 - 0xe1f00000 ( 17 MB)
> > > [ 0.000000] lowmem : 0xe0100000 - 0xe0e00000 ( 13 MB)
> > > [ 0.000000] vmalloc : 0xe0000000 - 0xe0100000 ( 1 MB)
> > > [ 0.000000] lowmem : 0xcff17000 - 0xe0000000 ( 256 MB)
> > > [ 0.000000] vmalloc : 0xcab00000 - 0xcff17000 ( 84 MB)
> > > [ 0.000000] lowmem : 0xc6300000 - 0xcab00000 ( 72 MB)
> > > [ 0.000000] vmalloc : 0xc5fff000 - 0xc6300000 ( 3 MB)
> > > [ 0.000000] lowmem : 0xc5f10000 - 0xc5fff000 ( 0 MB)
> > > [ 0.000000] vmalloc : 0xc5a00000 - 0xc5f10000 ( 5 MB)
> > > [ 0.000000] lowmem : 0xc0000000 - 0xc5a00000 ( 90 MB)
> > > [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
> > > [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
> > > [ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (27616 kB)
> > > [ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
> > > [ 0.000000] .data : 0x(ptrval) - 0x(ptrval) (2221 kB)
> > > [ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (8100 kB)
> > >
> > > 5. Now my solution is that, add all vmalloc regions above except
> > > highmem to the mapping. Then my machine bringup successfully.
> > > arch/arm/mm/kasan_init.c -> kasan_init() -> create_mapping().
> > >
> > > 6. Next I will continue to try and enjoy your kasan-for-arm32 patch in
> > > my machine.
> > >
> > > Thanks again dear Linus Walleij and Lecopzer.chen,
> > >
> > > Linus Walleij <linus.walleij@linaro.org> 于2022年11月10日周四 17:51写道:
> > >>
> > >> On Wed, Nov 9, 2022 at 12:14 PM 李文杰 <liwenjie.liwenjie@bytedance.com> wrote:
> > >>
> > >> [Contex: porting kasan to kernel v5.4]
> > >>
> > >>> 1. I know why my machine crash after porting the patch.
> > >>> 2. Because the kernel access the vmalloc region, which not shadowed.
> > >>> 3. Now I found at least two places where used vmalloc region:
> > >>> 1). arch/arm/mm/fault-armv.c ->check_writebuffer_bugs() -> vmap();
> > >>> 2). lib/genalloc.c -> chunk = vzalloc_node(nbytes, nid);
> > >>> 4. could I add the vmalloc to shadow memory region?
> > >>
> > >> I think you need to backport at least the following patches from upstream:
> > >>
> > >> 823f606ab6b4 ARM: 9242/1: kasan: Only map modules if CONFIG_KASAN_VMALLOC=n
> > >> 565cbaad83d8 ARM: 9202/1: kasan: support CONFIG_KASAN_VMALLOC
> > >>
> > >> Both from Lecopzer Chen.
> > >>
> > >> Yours,
> > >> Linus Walleij
> > >
> > > _______________________________________________
> > > linux-arm-kernel mailing list
> > > linux-arm-kernel@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> >
> > --
> > Florian
> >
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* kasan-for-arm32
@ 2023-01-29 3:41 李文杰
0 siblings, 0 replies; 8+ messages in thread
From: 李文杰 @ 2023-01-29 3:41 UTC (permalink / raw)
To: linux-arm-kernel, Linus Walleij
Hello everyone:
1. I encountered a problem when porting the patch of kasan-for-arm32
which contributed by linus.walleij@linaro.org. The problem is as
follows.
2. The global functions in the .ko module which exported by
EXPORT_SYMBOL() was treated as global variable by mistake. Then kasan
calls the __asan_register_globals() to register it and causes kernel
panic:
[ 103.830475] Unable to handle kernel paging request at virtual
address be1030f8
[ 103.838288] pgd = c289c846
[ 103.841130] [be1030f8] *pgd=772f8811, *pte=430e76df, *ppte=430e765f
...
[ 103.893070] CPU: 0 PID: 783 Comm: modprobe Tainted: G B W O
5.4.134-debug+ #1
...
[ 103.909498] PC is at mmioset+0x74/0xa8
[ 103.913403] LR is at kasan_poison_shadow+0x28/0x2c
...
[ 104.226636] Backtrace:
[ 104.226671] [<c0382278>] (kasan_poison_shadow) from [<c03823dc>]
(kasan_unpoison_shadow+0x1c/0x34)
[ 104.226700] [<c03823c0>] (kasan_unpoison_shadow) from [<c03837a8>]
(__asan_register_globals+0x3c/0x60)
[ 104.226712] r5:00000016 r4:f881f070
[ 104.265480] [<c038376c>] (__asan_register_globals) from
[<f8817060>] (_GLOBAL__sub_I_65535_1_rmnet_is_real_dev_registered+0x18/0x20
[rmnet_core])
[ 104.265498] r7:f8825630 r6:c7267700 r5:00000001 r4:f88254c0
[ 104.318152] [<f8817048>]
(_GLOBAL__sub_I_65535_1_rmnet_is_real_dev_registered [rmnet_core])
from [<c17be778>] (do_init_module+0x274/0x2f8)
[ 104.318182] [<c17be504>] (do_init_module) from [<c022df18>]
(load_module+0x2ea4/0x37cc)
[ 104.337397] r10:d5827ee0 r9:e0e86000 r8:00000001 r7:c3096210
r6:00000001 r5:c72678a4
[ 104.337407] r4:f88254c0
[ 104.337438] [<c022b074>] (load_module) from [<c022ebc8>]
(sys_finit_module+0x120/0x184)
[ 104.337459] r10:00000003 r9:b6bc4231 r8:d5827ee0 r7:00000000
r6:c2a0e848 r5:d5827f60
[ 104.337469] r4:b9b04fc8
[ 104.337496] [<c022eaa8>] (sys_finit_module) from [<c0101000>]
(ret_fast_syscall+0x0/0x2c)
3. rmnet_is_real_dev_registered() actually is a global function which
EXPORT_SYMBOL() in a module. But it was treated as a global variable.
Could someone help me ? Thanks,
...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-01-29 3:42 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-09 11:14 kasan-for-arm32 李文杰
2022-11-10 9:51 ` kasan-for-arm32 Linus Walleij
2022-11-10 16:17 ` [External] kasan-for-arm32 李文杰
2022-11-10 22:43 ` Florian Fainelli
2022-11-11 7:53 ` 李文杰
2022-11-28 7:06 ` 李文杰
2022-12-18 10:46 ` 李文杰
-- strict thread matches above, loose matches on Subject: below --
2023-01-29 3:41 kasan-for-arm32 李文杰
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).