• S
    ARM: 7727/1: remove the .vm_mm value from gate_vma · 4ca46c5e
    Steven Capper 提交于
    If one reads /proc/$PID/smaps, the mmap_sem belonging to the
    address space of the task being examined is locked for reading.
    All the pages of the vmas belonging to the task's address space
    are then walked with this lock held.
    
    If a gate_vma is present in the architecture, it too is examined
    by the fs/proc/task_mmu.c code. As gate_vma doesn't belong to the
    address space of the task though, its pages are not walked.
    
    A recent cleanup (commit f6604efe) of the gate_vma initialisation
    code set the vm_mm value to &init_mm. Unfortunately a non-NULL
    vm_mm value in the gate_vma will cause the task_mmu code to attempt
    to walk the pages of the gate_vma (with no mmap-sem lock held). If
    one enables Transparent Huge Page support and vm debugging, this
    will then cause OOPses as pmd_trans_huge_lock is called without
    mmap_sem being locked.
    
    This patch removes the .vm_mm value from gate_vma, restoring the
    original behaviour of the task_mmu code.
    Signed-off-by: NSteve Capper <steve.capper@linaro.org>
    Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
    4ca46c5e
process.c 10.0 KB