mirror of
https://github.com/opnsense/src.git
synced 2026-04-12 04:46:39 -04:00
x86 pmap: Make memory mapped via pmap_qenter() non-executable
The idea is, the pmap_qenter() API is now defined to not produce executable mappings. If you need executable mappings, use another API. Add pg_nx flag in pmap_qenter on x86 to make kernel pages non-executable. Other architectures that support execute-specific permissons on page table entries should subsequently be updated to match. Submitted by: Darrick Lew <darrick.freebsd AT gmail.com> Reviewed by: markj Discussed with: alc, jhb, kib Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D14062
This commit is contained in:
parent
8be8c75688
commit
5bd0149714
2 changed files with 5 additions and 1 deletions
|
|
@ -2338,7 +2338,7 @@ pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count)
|
|||
pa = VM_PAGE_TO_PHYS(m) | cache_bits;
|
||||
if ((*pte & (PG_FRAME | X86_PG_PTE_CACHE)) != pa) {
|
||||
oldpte |= *pte;
|
||||
pte_store(pte, pa | pg_g | X86_PG_RW | X86_PG_V);
|
||||
pte_store(pte, pa | pg_g | pg_nx | X86_PG_RW | X86_PG_V);
|
||||
}
|
||||
pte++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1677,7 +1677,11 @@ pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count)
|
|||
pa = VM_PAGE_TO_PHYS(m) | pmap_cache_bits(m->md.pat_mode, 0);
|
||||
if ((*pte & (PG_FRAME | PG_PTE_CACHE)) != pa) {
|
||||
oldpte |= *pte;
|
||||
#if defined(PAE) || defined(PAE_TABLES)
|
||||
pte_store(pte, pa | pgeflag | pg_nx | PG_RW | PG_V);
|
||||
#else
|
||||
pte_store(pte, pa | pgeflag | PG_RW | PG_V);
|
||||
#endif
|
||||
}
|
||||
pte++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue