[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH] kernel2: Fix fuer Unmapping beim RPC



On Sun, Jan 31 01:20, Kevin Wolf wrote:
> ! 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(&current_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));

Wenn du mit der Panic-Meldung so zufrieden bist, dann rein damit. ;-)

Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx>

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgp3J3wrfCNoU.pgp
Description: PGP signature