• Rick Lindsley's avatar
    powerpc/book3s/64: check for NULL pointer in pgd_alloc() · 6aa7a9ea
    Rick Lindsley authored
    commit f3935626 upstream.
    
    When the memset code was added to pgd_alloc(), it failed to consider
    that kmem_cache_alloc() can return NULL. It's uncommon, but not
    impossible under heavy memory contention. Example oops:
    
      Unable to handle kernel paging request for data at address 0x00000000
      Faulting instruction address: 0xc0000000000a4000
      Oops: Kernel access of bad area, sig: 11 [#1]
      LE SMP NR_CPUS=2048 NUMA pSeries
      CPU: 70 PID: 48471 Comm: entrypoint.sh Kdump: loaded Not tainted 4.14.0-115.6.1.el7a.ppc64le #1
      task: c000000334a00000 task.stack: c000000331c00000
      NIP:  c0000000000a4000 LR: c00000000012f43c CTR: 0000000000000020
      REGS: c000000331c039c0 TRAP: 0300   Not tainted  (4.14.0-115.6.1.el7a.ppc64le)
      MSR:  800000010280b033 <SF,VEC,VSX,EE,FP,ME,IR,DR,RI,LE,TM[E]>  CR: 44022840  XER: 20040000
      CFAR: c000000000008874 DAR: 0000000000000000 DSISR: 42000000 SOFTE: 1
      ...
      NIP [c0000000000a4000] memset+0x68/0x104
      LR [c00000000012f43c] mm_init+0x27c/0x2f0
      Call Trace:
        mm_init+0x260/0x2f0 (unreliable)
        copy_mm+0x11c/0x638
        copy_process.isra.28.part.29+0x6fc/0x1080
        _do_fork+0xdc/0x4c0
        ppc_clone+0x8/0xc
      Instruction dump:
      409e000c b0860000 38c60002 409d000c 90860000 38c60004 78a0d183 78a506a0
      7c0903a6 41820034 60000000 60420000 <f8860000> f8860008 f8860010 f8860018
    
    Fixes: fc5c2f4a ("powerpc/mm/hash64: Zero PGD pages on allocation")
    Cc: stable@vger.kernel.org # v4.16+
    Signed-off-by: default avatarRick Lindsley <ricklind@vnet.linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6aa7a9ea
pgalloc.h 6.56 KB