]> git.baikalelectronics.ru Git - kernel.git/commit
mm: fix NULL pointer dereference in wp_page_reuse()
authorQi Zheng <zhengqi.arch@bytedance.com>
Tue, 26 Jul 2022 06:24:36 +0000 (14:24 +0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 26 Jul 2022 16:21:43 +0000 (09:21 -0700)
commit0d9e9949d1925e4999e2568f94ffd33ff0745f66
tree22d312d4d3875c486bdd61311d36a116fada06be
parentb7eabeb88edc837581d3d6c77c88f187f9f53a86
mm: fix NULL pointer dereference in wp_page_reuse()

The vmf->page can be NULL when the wp_page_reuse() is invoked by
wp_pfn_shared(), it will cause the following panic:

  BUG: kernel NULL pointer dereference, address: 000000000000008
  #PF: supervisor read access in kernel mode
  #PF: error_code(0x0000) - not-present page
  PGD 0 P4D 0
  Oops: 0000 [#1] PREEMPT SMP PTI
  CPU: 18 PID: 923 Comm: Xorg Not tainted 5.19.0-rc8.bm.1-amd64 #263
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g14
  RIP: 0010:_compound_head+0x0/0x40
  [...]
  Call Trace:
    wp_page_reuse+0x1c/0xa0
    do_wp_page+0x1a5/0x3f0
    __handle_mm_fault+0x8cf/0xd20
    handle_mm_fault+0xd5/0x2a0
    do_user_addr_fault+0x1d0/0x680
    exc_page_fault+0x78/0x170
    asm_exc_page_fault+0x22/0x30

To fix it, this patch performs a NULL pointer check before dereferencing
the vmf->page.

Fixes: d87b8c432b90 ("mm: remember exclusively mapped anonymous pages with PG_anon_exclusive")
Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/memory.c