lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAAhV-H4A74u9CmLcF3O6sFJbJXcxOyww1or1NJ-AntEOUgBMzQ@mail.gmail.com>
Date: Tue, 4 Mar 2025 20:20:11 +0800
From: Huacai Chen <chenhuacai@...nel.org>
To: Bibo Mao <maobibo@...ngson.cn>
Cc: WANG Xuerui <kernel@...0n.name>, loongarch@...ts.linux.dev, 
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH] LoongArch: mm: Set hugetlb mmap base address aligned with
 pmd size

Hi, Bibo,

On Tue, Mar 4, 2025 at 7:27 PM Bibo Mao <maobibo@...ngson.cn> wrote:
>
> With ltp test case "testcases/bin/hugefork02", there is dmesg error
> report message such as
>  kernel BUG at mm/hugetlb.c:5550!
>  Oops - BUG[#1]:
>  CPU: 0 UID: 0 PID: 1517 Comm: hugefork02 Not tainted 6.14.0-rc2+ #241
>  Hardware name: QEMU QEMU Virtual Machine, BIOS unknown 2/2/2022
>  pc 90000000004eaf1c ra 9000000000485538 tp 900000010edbc000 sp 900000010edbf940
>  a0 900000010edbfb00 a1 9000000108d20280 a2 00007fffe9474000 a3 00007ffff3474000
>  a4 0000000000000000 a5 0000000000000003 a6 00000000003cadd3 a7 0000000000000000
>  t0 0000000001ffffff t1 0000000001474000 t2 900000010ecd7900 t3 00007fffe9474000
>  t4 00007fffe9474000 t5 0000000000000040 t6 900000010edbfb00 t7 0000000000000001
>  t8 0000000000000005 u0 90000000004849d0 s9 900000010edbfa00 s0 9000000108d20280
>  s1 00007fffe9474000 s2 0000000002000000 s3 9000000108d20280 s4 9000000002b38b10
>  s5 900000010edbfb00 s6 00007ffff3474000 s7 0000000000000406 s8 900000010edbfa08
>     ra: 9000000000485538 unmap_vmas+0x130/0x218
>    ERA: 90000000004eaf1c __unmap_hugepage_range+0x6f4/0x7d0
>   PRMD: 00000004 (PPLV0 +PIE -PWE)
>   EUEN: 00000007 (+FPE +SXE +ASXE -BTE)
>   ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
>  ESTAT: 000c0000 [BRK] (IS= ECode=12 EsubCode=0)
>  PRID: 0014c010 (Loongson-64bit, Loongson-3A5000)
>  Modules linked in: snd_seq_dummy snd_seq snd_seq_device rfkill vfat fat virtio_net net_failover failover efi_pstore virtio_balloon pstore fuse nfnetlink virtio_scsi dm_multipath efivarfs
>  Process hugefork02 (pid: 1517, threadinfo=00000000a670eaf4, task=000000007a95fc64)
>  Call Trace:
>  [<90000000004eaf1c>] __unmap_hugepage_range+0x6f4/0x7d0
>  [<9000000000485534>] unmap_vmas+0x12c/0x218
>  [<9000000000494068>] exit_mmap+0xe0/0x308
>  [<900000000025fdc4>] mmput+0x74/0x180
>  [<900000000026a284>] do_exit+0x294/0x898
>  [<900000000026aa30>] do_group_exit+0x30/0x98
>  [<900000000027bed4>] get_signal+0x83c/0x868
>  [<90000000002457b4>] arch_do_signal_or_restart+0x54/0xfa0
>  [<90000000015795e8>] irqentry_exit_to_user_mode+0xb8/0x138
>  [<90000000002572d0>] tlb_do_page_fault_1+0x114/0x1b4
>
> The problem is that base address allocated from hugetlbfs is not aligned
> with pmd size. Here add checking for hugetlbfs and align base address
> with pmd size. After this patch rest case "testcases/bin/hugefork02"
> passes to run.
>
> Signed-off-by: Bibo Mao <maobibo@...ngson.cn>
> ---
>  arch/loongarch/mm/mmap.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/loongarch/mm/mmap.c b/arch/loongarch/mm/mmap.c
> index 914e82ff3f65..1df9e99582cc 100644
> --- a/arch/loongarch/mm/mmap.c
> +++ b/arch/loongarch/mm/mmap.c
> @@ -3,6 +3,7 @@
>   * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
>   */
>  #include <linux/export.h>
> +#include <linux/hugetlb.h>
>  #include <linux/io.h>
>  #include <linux/kfence.h>
>  #include <linux/memblock.h>
> @@ -63,8 +64,11 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
>         }
>
>         info.length = len;
> -       info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
>         info.align_offset = pgoff << PAGE_SHIFT;
> +       if (filp && is_file_hugepages(filp))
> +               info.align_mask = huge_page_mask_align(filp);
> +       else
> +               info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
Thank you for your catch, I think this problem only exist after commit
7f24cbc9c4d42db8a3c8484d120cf9c1 ("mm/mmap: teach
generic_get_unmapped_area{_topdown} to handle hugetlb mappings"). But
you don't need to resend, I will add this information when I apply.

Huacai

>
>         if (dir == DOWN) {
>                 info.flags = VM_UNMAPPED_AREA_TOPDOWN;
> --
> 2.39.3
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ