[RFC PATCH v1] riscv: mm: Ensure prot of VM_WRITE and VM_EXEC must be readable
Conor Dooley
conor.dooley at microchip.com
Mon Apr 24 23:54:33 PDT 2023
Hey Hsieh-Tseng,
On Tue, Apr 25, 2023 at 11:44:07AM +0800, Woodrow Shen wrote:
> From: Hsieh-Tseng Shen <woodrow.shen at sifive.com>
>
> The commit 8aeb7b1 allows riscv to use mmap with PROT_WRITE only,
> and meanwhile mmap with w+x is also permitted. However, when userspace
> tries to access this page with PROT_WRITE|PROT_EXEC, which causes
> infinite loop at load page fault as well as it triggers soft lockup.
> According to riscv privileged spec, "Writable pages must also be marked
> readable". The fix to drop the `PAGE_COPY_READ_EXEC` and `PAGE_READ_EXEC`
> should be just used instead. This aligns the other arches (i.e arm64)
> for protection_map.
>
> Fixes: 8aeb7b1 ("RISC-V: Make mmap() with PROT_WRITE imply PROT_READ")
This fixes tag should be:
Fixes: 8aeb7b17f04e ("RISC-V: Make mmap() with PROT_WRITE imply PROT_READ")
as checkpatch would have told you :/ Perhaps Palmer can fix that up on
application?
> Signed-off-by: Hsieh-Tseng Shen <woodrow.shen at sifive.com>
> Reviewed-by: Alexandre Ghiti <alexghiti at rivosinc.com>
> ---
This is not v1, it's v2 right?
Please include a changelog between versions.
Also, what makes it an RFC, it's an actual fix that you would like
merged, right?
Thanks,
Conor.
> arch/riscv/include/asm/pgtable.h | 3 +--
> arch/riscv/mm/init.c | 2 +-
> 2 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
> index f641837ccf31..05eda3281ba9 100644
> --- a/arch/riscv/include/asm/pgtable.h
> +++ b/arch/riscv/include/asm/pgtable.h
> @@ -165,8 +165,7 @@ extern struct pt_alloc_ops pt_ops __initdata;
> _PAGE_EXEC | _PAGE_WRITE)
>
> #define PAGE_COPY PAGE_READ
> -#define PAGE_COPY_EXEC PAGE_EXEC
> -#define PAGE_COPY_READ_EXEC PAGE_READ_EXEC
> +#define PAGE_COPY_EXEC PAGE_READ_EXEC
> #define PAGE_SHARED PAGE_WRITE
> #define PAGE_SHARED_EXEC PAGE_WRITE_EXEC
>
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 0f14f4a8d179..cc48b0d93a98 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -286,7 +286,7 @@ static const pgprot_t protection_map[16] = {
> [VM_EXEC] = PAGE_EXEC,
> [VM_EXEC | VM_READ] = PAGE_READ_EXEC,
> [VM_EXEC | VM_WRITE] = PAGE_COPY_EXEC,
> - [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_READ_EXEC,
> + [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_EXEC,
> [VM_SHARED] = PAGE_NONE,
> [VM_SHARED | VM_READ] = PAGE_READ,
> [VM_SHARED | VM_WRITE] = PAGE_SHARED,
> --
> 2.34.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-riscv/attachments/20230425/4f2c451a/attachment.sig>
More information about the linux-riscv
mailing list