Page MenuHomeFreeBSD

D35952.id108562.diff
No OneTemporary

D35952.id108562.diff

Index: sys/riscv/include/pmap.h
===================================================================
--- sys/riscv/include/pmap.h
+++ sys/riscv/include/pmap.h
@@ -151,6 +151,11 @@
extern enum pmap_mode pmap_mode;
+/* Check if an address resides in a mappable region. */
+#define VIRT_IS_VALID(va) \
+ ((va) < (pmap_mode == PMAP_MODE_SV39 ? VM_MAX_USER_ADDRESS_SV39 : \
+ VM_MAX_USER_ADDRESS_SV48) || (va) >= VM_MIN_KERNEL_ADDRESS)
+
struct thread;
#define pmap_vm_page_alloc_check(m)
Index: sys/riscv/include/vmparam.h
===================================================================
--- sys/riscv/include/vmparam.h
+++ sys/riscv/include/vmparam.h
@@ -202,10 +202,6 @@
#define VM_MINUSER_ADDRESS (VM_MIN_USER_ADDRESS)
#define VM_MAXUSER_ADDRESS (VM_MAX_USER_ADDRESS)
-/* Check if an address resides in a mappable region. */
-#define VIRT_IS_VALID(va) \
- (((va) < VM_MAX_USER_ADDRESS) || ((va) >= VM_MIN_KERNEL_ADDRESS))
-
#define KERNBASE (VM_MIN_KERNEL_ADDRESS)
#define SHAREDPAGE_SV39 (VM_MAX_USER_ADDRESS_SV39 - PAGE_SIZE)
#define SHAREDPAGE_SV48 (VM_MAX_USER_ADDRESS_SV48 - PAGE_SIZE)
Index: sys/riscv/riscv/pmap.c
===================================================================
--- sys/riscv/riscv/pmap.c
+++ sys/riscv/riscv/pmap.c
@@ -2778,6 +2778,8 @@
pt_entry_t bits, *pte, oldpte;
int rv;
+ KASSERT(VIRT_IS_VALID(va), ("pmap_fault: invalid va %#lx", va));
+
rv = 0;
PMAP_LOCK(pmap);
l2 = pmap_l2(pmap, va);
Index: sys/riscv/riscv/trap.c
===================================================================
--- sys/riscv/riscv/trap.c
+++ sys/riscv/riscv/trap.c
@@ -213,10 +213,7 @@
*/
intr_enable();
- if (!VIRT_IS_VALID(stval))
- goto fatal;
-
- if (stval >= VM_MAX_USER_ADDRESS) {
+ if (stval >= VM_MIN_KERNEL_ADDRESS) {
map = kernel_map;
} else {
if (pcb->pcb_onfault == 0)
@@ -235,7 +232,7 @@
ftype = VM_PROT_READ;
}
- if (pmap_fault(map->pmap, va, ftype))
+ if (VIRT_IS_VALID(va) && pmap_fault(map->pmap, va, ftype))
goto done;
error = vm_fault_trap(map, va, ftype, VM_FAULT_NORMAL, &sig, &ucode);

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 25, 3:55 AM (9 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12727639
Default Alt Text
D35952.id108562.diff (2 KB)

Event Timeline