From 535018ae7247ede06606e4d8aced2d12c761f28f Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 20 Mar 2021 21:55:52 +0100 Subject: Reimplemented memory range validation --- kernel/features/mm.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'kernel/features/mm.c') diff --git a/kernel/features/mm.c b/kernel/features/mm.c index b804076..d14bd81 100644 --- a/kernel/features/mm.c +++ b/kernel/features/mm.c @@ -412,24 +412,27 @@ void memory_backup_dir(struct page_dir **backup) *backup = dir; } -// TODO: Verify that this isn't a huge security risk static u8 memory_bypass_validity = 0; void memory_bypass_enable(void) { - /* memory_bypass_validity = 1; */ + memory_bypass_validity = 1; } void memory_bypass_disable(void) { - /* memory_bypass_validity = 0; */ + memory_bypass_validity = 0; +} + +u8 memory_is_user(u32 addr) +{ + return PDI(addr) >= PAGE_KERNEL_COUNT; } // TODO: Limit by proc stack and data range u8 memory_valid(const void *addr) { - /* return ((u32)addr) / PAGE_SIZE / PAGE_COUNT >= PAGE_KERNEL_COUNT; */ if (proc_current() && !memory_bypass_validity) - return (u32)addr >= 0x100000; + return memory_is_user((u32)addr); else return 1; } -- cgit v1.2.3