• Anton Blanchard's avatar
    [PATCH] Use MM_VM_SIZE in exit_mmap · 8ac6e828
    Anton Blanchard authored
    The 4 level pagetable code changed the exit_mmap code to rely on TASK_SIZE.
     On some architectures (eg ppc64 and ia64), this is a per task property and
    bad things can happen in certain circumstances when using it.
    
    It is possible for one task to end up "owning" an mm from another - we have
    seen this with the procfs code when process 1 accesses /proc/pid/cmdline of
    process 2 while it is exiting.  Process 2 exits but does not tear its mm
    down.  Later on process 1 finishes with the proc file and the mm gets torn
    down at this point.
    
    Now if process 1 was 32bit and process 2 was 64bit then we end up using a
    bad value for TASK_SIZE in exit_mmap.  We only tear down part of the
    address space and leave half initialised pagetables and entries in the MMU
    etc.
    
    MM_VM_SIZE() was created for this purpose (and is used in the next line for
    tlb_finish_mmu), so use it.  I moved the PGD round up of TASK_SIZE into the
    default MM_VM_SIZE.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    8ac6e828
mmap.c 54.3 KB