Module Name: src Committed By: ryo Date: Mon Aug 27 15:43:37 UTC 2018
Modified Files: src/sys/arch/aarch64/aarch64: pmap.c Log Message: need to add VM_PROT_READ when pmap_kenter_pa(va, pa, VM_PROT_WRITE, 0) or pmap_kenter_pa(va, pa, VM_PROT_EXECUTE, 0). VM_PROT_READ is treated as an access permission inernally. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/aarch64/aarch64/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/aarch64/aarch64/pmap.c diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.19 src/sys/arch/aarch64/aarch64/pmap.c:1.20 --- src/sys/arch/aarch64/aarch64/pmap.c:1.19 Sat Aug 11 12:16:34 2018 +++ src/sys/arch/aarch64/aarch64/pmap.c Mon Aug 27 15:43:37 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.19 2018/08/11 12:16:34 ryo Exp $ */ +/* $NetBSD: pmap.c,v 1.20 2018/08/27 15:43:37 ryo Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.19 2018/08/11 12:16:34 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.20 2018/08/27 15:43:37 ryo Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -1062,8 +1062,6 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, v { int s; - KASSERT((prot & VM_PROT_READ) || !(prot & VM_PROT_WRITE)); - s = splvm(); _pmap_enter(pmap_kernel(), va, pa, prot, flags | PMAP_WIRED, true); splx(s); @@ -1490,6 +1488,14 @@ _pmap_enter(struct pmap *pm, vaddr_t va, pm->pm_stats.resident_count--; } + /* + * read permission is treated as an access permission internally. + * require to add PROT_READ even if only PROT_WRITE or PROT_EXEC + * for wired mapping. + */ + if ((flags & PMAP_WIRED) && (prot & (VM_PROT_WRITE|VM_PROT_EXECUTE))) + prot |= VM_PROT_READ; + mdattr = VM_PROT_READ | VM_PROT_WRITE; if (pg != NULL) { error = _pmap_enter_pv(pg, pm, &spv, va, ptep, pa, flags);