• Vineet Gupta's avatar
    ARC: mm: don't loose PTE_SPECIAL in pte_modify() · 3925a16a
    Vineet Gupta authored
    LTP madvise05 was generating mm splat
    
    | [ARCLinux]# /sd/ltp/testcases/bin/madvise05
    | BUG: Bad page map in process madvise05  pte:80e08211 pmd:9f7d4000
    | page:9fdcfc90 count:1 mapcount:-1 mapping:  (null) index:0x0 flags: 0x404(referenced|reserved)
    | page dumped because: bad pte
    | addr:200b8000 vm_flags:00000070 anon_vma:  (null) mapping:  (null) index:1005c
    | file:  (null) fault:  (null) mmap:  (null) readpage:  (null)
    | CPU: 2 PID: 6707 Comm: madvise05
    
    And for newer kernels, the system was rendered unusable afterwards.
    
    The problem was mprotect->pte_modify() clearing PTE_SPECIAL (which is
    set to identify the special zero page wired to the pte).
    When pte was finally unmapped, special casing for zero page was not
    done, and instead it was treated as a "normal" page, tripping on the
    map counts etc.
    
    This fixes ARC STAR 9001053308
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    3925a16a
pgtable.h 14.1 KB