diff mbox series

riscv: read-only pages should not be writable

Message ID 20220528014132.91052-1-heinrich.schuchardt@canonical.com (mailing list archive)
State New, archived
Headers show
Series riscv: read-only pages should not be writable | expand

Commit Message

Heinrich Schuchardt May 28, 2022, 1:41 a.m. UTC
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 <heinrich.schuchardt@canonical.com>
---
 arch/riscv/kernel/efi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ard Biesheuvel May 28, 2022, 9:13 a.m. UTC | #1
On Sat, 28 May 2022 at 03:41, Heinrich Schuchardt
<heinrich.schuchardt@canonical.com> 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 <heinrich.schuchardt@canonical.com>
> ---
>  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.
Heinrich Schuchardt May 28, 2022, 9:26 a.m. UTC | #2
On 5/28/22 11:13, Ard Biesheuvel wrote:
> On Sat, 28 May 2022 at 03:41, Heinrich Schuchardt
> <heinrich.schuchardt@canonical.com> 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 <heinrich.schuchardt@canonical.com>
>> ---
>>   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.

I guess this should also be down-ported to 5.15 and 5.10.

Best regards

Heinrich
diff mbox series

Patch

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) {