2022-05-28 19:29:02

by Heinrich Schuchardt

[permalink] [raw]
Subject: [PATCH] riscv: read-only pages should not be writable

If EFI pages are marked as read-only,
we should remove the _PAGE_WRITE flag.

The current code overwrites an unused value.

Fixes: b91540d52a08b ("RISC-V: Add EFI runtime services")
Signed-off-by: Heinrich Schuchardt <[email protected]>
---
arch/riscv/kernel/efi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/riscv/kernel/efi.c b/arch/riscv/kernel/efi.c
index 024159298231..1aa540350abd 100644
--- a/arch/riscv/kernel/efi.c
+++ b/arch/riscv/kernel/efi.c
@@ -65,7 +65,7 @@ static int __init set_permissions(pte_t *ptep, unsigned long addr, void *data)

if (md->attribute & EFI_MEMORY_RO) {
val = pte_val(pte) & ~_PAGE_WRITE;
- val = pte_val(pte) | _PAGE_READ;
+ val |= _PAGE_READ;
pte = __pte(val);
}
if (md->attribute & EFI_MEMORY_XP) {
--
2.36.1



2022-05-28 20:30:15

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: [PATCH] riscv: read-only pages should not be writable

On Sat, 28 May 2022 at 03:41, Heinrich Schuchardt
<[email protected]> wrote:
>
> If EFI pages are marked as read-only,
> we should remove the _PAGE_WRITE flag.
>
> The current code overwrites an unused value.
>
> Fixes: b91540d52a08b ("RISC-V: Add EFI runtime services")
> Signed-off-by: Heinrich Schuchardt <[email protected]>
> ---
> arch/riscv/kernel/efi.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/riscv/kernel/efi.c b/arch/riscv/kernel/efi.c
> index 024159298231..1aa540350abd 100644
> --- a/arch/riscv/kernel/efi.c
> +++ b/arch/riscv/kernel/efi.c
> @@ -65,7 +65,7 @@ static int __init set_permissions(pte_t *ptep, unsigned long addr, void *data)
>
> if (md->attribute & EFI_MEMORY_RO) {
> val = pte_val(pte) & ~_PAGE_WRITE;
> - val = pte_val(pte) | _PAGE_READ;
> + val |= _PAGE_READ;
> pte = __pte(val);
> }
> if (md->attribute & EFI_MEMORY_XP) {
> --
> 2.36.1
>

Thanks Heinrich

Queued in efi/urgent.