From 7485f7e441ca892876d9401380aa77610eb85f76 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 16 Apr 2021 23:22:02 +0200 Subject: New elegant I/O blocking solution This is done using an internal scheduler syscall (127). Very nice! --- kernel/features/mm.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'kernel/features/mm.c') diff --git a/kernel/features/mm.c b/kernel/features/mm.c index d9e4577..9f0bd07 100644 --- a/kernel/features/mm.c +++ b/kernel/features/mm.c @@ -602,11 +602,17 @@ void memory_bypass_disable(void) u8 memory_is_user(const void *addr) { + if (!addr) + return 0; + return PDI((u32)addr) >= PAGE_KERNEL_COUNT; } u8 memory_readable(const void *addr) { + if (!addr) + return 0; + struct proc *proc = proc_current(); if (proc && !memory_bypass_validity) return memory_is_user(addr) && virtual_user_readable(proc->page_dir, (u32)addr); @@ -616,6 +622,9 @@ u8 memory_readable(const void *addr) u8 memory_writable(const void *addr) { + if (!addr) + return 0; + struct proc *proc = proc_current(); if (proc && !memory_bypass_validity) return memory_is_user(addr) && virtual_user_writable(proc->page_dir, (u32)addr); -- cgit v1.2.3