[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] kernel2: Fix fuer Unmapping beim RPC
! kernel2: Der aktuelle Speicherkontext muss auch beim Unmappen immer
noch nicht zwingend der Kontext des aktuellen Prozesses sein
+ kernel2: Panic wenn versucht wird, das Mapping einer Kernelpage in
einem inaktiven Kontext zu aendern
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/kernel2/src/arch/i386/mm/mm_context.c | 12 +++++++++++-
src/kernel2/src/syscalls/rpc.c | 2 +-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/kernel2/src/arch/i386/mm/mm_context.c b/src/kernel2/src/arch/i386/mm/mm_context.c
index 20edcfa..07a5be8 100644
--- a/src/kernel2/src/arch/i386/mm/mm_context.c
+++ b/src/kernel2/src/arch/i386/mm/mm_context.c
@@ -271,7 +271,17 @@ static bool map_page
panic("Adressen sind nicht 4K-aligned (virt = %x, phys = %x)",
vaddr, paddr);
}
-
+
+ // Kernelpages duerfen immer nur im gerade aktiven Kontext gemappt werden.
+ // Ales andere ergibt keinen Sinn, weil diese Bereiche ohnehin zwischen
+ // allen Kontexten synchron gehalten werden muessen.
+ if ((context != &mmc_current_context()) &&
+ ((uintptr_t) vaddr >= KERNEL_MEM_START) &&
+ ((uintptr_t) vaddr < KERNEL_MEM_END))
+ {
+ panic("Versuch, Kernelpages in inaktivem Kontext zu mappen");
+ }
+
// Falls es sich im den aktuellen Kontext handelt, muss das Page directory
// nicht gemappt werden, sonst schon.
diff --git a/src/kernel2/src/syscalls/rpc.c b/src/kernel2/src/syscalls/rpc.c
index 53f5396..70e0920 100644
--- a/src/kernel2/src/syscalls/rpc.c
+++ b/src/kernel2/src/syscalls/rpc.c
@@ -282,7 +282,7 @@ static int do_fastrpc(pid_t callee_pid, size_t metadata_size, void* metadata,
callee_isf->eip = (uintptr_t) callee->process->rpc_handler;
// Temporaere Mappings wieder aufheben
- mmc_unmap(¤t_process->context, first_stack_page,
+ mmc_unmap(&mmc_current_context(), first_stack_page,
NUM_PAGES(rounded_data_size));
vmm_kernel_unmap(callee_isf, sizeof(*callee_isf));
--
1.6.0.2