From 79f7312a49c516f5c250a64a70f6959e7f95ded3 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 5 Nov 2014 03:53:32 +0100 Subject: [PATCH] Fix page protection bugs. --- kernel/x86-family/memorymanagement.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel/x86-family/memorymanagement.cpp b/kernel/x86-family/memorymanagement.cpp index e98f4490..41b8edfd 100644 --- a/kernel/x86-family/memorymanagement.cpp +++ b/kernel/x86-family/memorymanagement.cpp @@ -424,13 +424,14 @@ int PMLFlagsToProtection(addr_t flags) prot |= PROT_EXEC | PROT_READ; if ( user && write ) prot |= PROT_WRITE; + if ( flags & PML_FORK ) + prot |= PROT_FORK; return prot; } int ProvidedProtection(int prot) { - addr_t flags = ProtectionToPMLFlags(prot); - return PMLFlagsToProtection(flags); + return PMLFlagsToProtection(ProtectionToPMLFlags(prot)); } bool LookUp(addr_t mapto, addr_t* physical, int* protection) @@ -453,7 +454,7 @@ bool LookUp(addr_t mapto, addr_t* physical, int* protection) addr_t entry = pml->entry[childid]; if ( !(entry & PML_PRESENT) ) return false; - int entryflags = entry & PML_ADDRESS; + addr_t entryflags = entry & ~PML_ADDRESS; int entryprot = PMLFlagsToProtection(entryflags); prot &= entryprot; @@ -465,7 +466,7 @@ bool LookUp(addr_t mapto, addr_t* physical, int* protection) if ( !(entry & PML_PRESENT) ) return false; - int entryflags = entry & PML_ADDRESS; + addr_t entryflags = entry & ~PML_ADDRESS; int entryprot = PMLFlagsToProtection(entryflags); prot &= entryprot; addr_t phys = entry & PML_ADDRESS;