diff options
author | Jiantao Shan <shanjiantao@loongson.cn> | 2024-04-24 07:36:07 +0300 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2024-04-24 07:36:07 +0300 |
commit | efb44ff64c95340b06331fc48634b99efc9dd77c (patch) | |
tree | a63f45fc77cd3307d44c34b9814bc5e14f18ec78 /arch/loongarch/mm | |
parent | 7ab22b5c2af54e233f3d05d7d601025947e4ff05 (diff) | |
download | linux-efb44ff64c95340b06331fc48634b99efc9dd77c.tar.xz |
LoongArch: Fix access error when read fault on a write-only VMA
As with most architectures, allow handling of read faults in VMAs that
have VM_WRITE but without VM_READ (WRITE implies READ).
Otherwise, reading before writing a write-only memory will error while
reading after writing everything is fine.
BTW, move the VM_EXEC judgement before VM_READ/VM_WRITE to make logic a
little clearer.
Cc: stable@vger.kernel.org
Fixes: 09cfefb7fa70c3af01 ("LoongArch: Add memory management")
Signed-off-by: Jiantao Shan <shanjiantao@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/mm')
-rw-r--r-- | arch/loongarch/mm/fault.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/loongarch/mm/fault.c b/arch/loongarch/mm/fault.c index 1fc2f6813ea0..97b40defde06 100644 --- a/arch/loongarch/mm/fault.c +++ b/arch/loongarch/mm/fault.c @@ -202,10 +202,10 @@ good_area: if (!(vma->vm_flags & VM_WRITE)) goto bad_area; } else { - if (!(vma->vm_flags & VM_READ) && address != exception_era(regs)) - goto bad_area; if (!(vma->vm_flags & VM_EXEC) && address == exception_era(regs)) goto bad_area; + if (!(vma->vm_flags & (VM_READ | VM_WRITE)) && address != exception_era(regs)) + goto bad_area; } /* |