No description
Find a file
yangerkun 6d210d547a mm/memory-failure: make sure wait for page writeback in memory_failure
[ Upstream commit e8675d291a ]

Our syzkaller trigger the "BUG_ON(!list_empty(&inode->i_wb_list))" in
clear_inode:

  kernel BUG at fs/inode.c:519!
  Internal error: Oops - BUG: 0 [#1] SMP
  Modules linked in:
  Process syz-executor.0 (pid: 249, stack limit = 0x00000000a12409d7)
  CPU: 1 PID: 249 Comm: syz-executor.0 Not tainted 4.19.95
  Hardware name: linux,dummy-virt (DT)
  pstate: 80000005 (Nzcv daif -PAN -UAO)
  pc : clear_inode+0x280/0x2a8
  lr : clear_inode+0x280/0x2a8
  Call trace:
    clear_inode+0x280/0x2a8
    ext4_clear_inode+0x38/0xe8
    ext4_free_inode+0x130/0xc68
    ext4_evict_inode+0xb20/0xcb8
    evict+0x1a8/0x3c0
    iput+0x344/0x460
    do_unlinkat+0x260/0x410
    __arm64_sys_unlinkat+0x6c/0xc0
    el0_svc_common+0xdc/0x3b0
    el0_svc_handler+0xf8/0x160
    el0_svc+0x10/0x218
  Kernel panic - not syncing: Fatal exception

A crash dump of this problem show that someone called __munlock_pagevec
to clear page LRU without lock_page: do_mmap -> mmap_region -> do_munmap
-> munlock_vma_pages_range -> __munlock_pagevec.

As a result memory_failure will call identify_page_state without
wait_on_page_writeback.  And after truncate_error_page clear the mapping
of this page.  end_page_writeback won't call sb_clear_inode_writeback to
clear inode->i_wb_list.  That will trigger BUG_ON in clear_inode!

Fix it by checking PageWriteback too to help determine should we skip
wait_on_page_writeback.

Link: https://lkml.kernel.org/r/20210604084705.3729204-1-yangerkun@huawei.com
Fixes: 0bc1f8b068 ("hwpoison: fix the handling path of the victimized page frame that belong to non-LRU")
Signed-off-by: yangerkun <yangerkun@huawei.com>
Acked-by: Naoya Horiguchi <naoya.horiguchi@nec.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-06-30 08:48:14 -04:00
arch ARM: OMAP2+: Fix build warning when mmc_omap is not built 2021-06-30 08:48:11 -04:00
block blk-mq: Swap two calls in blk_mq_exit_queue() 2021-05-22 10:59:46 +02:00
certs certs: Fix blacklist flag type confusion 2021-03-04 09:39:44 +01:00
crypto crypto: api - check for ERR pointers in crypto_destroy_tfm() 2021-05-22 10:59:14 +02:00
Documentation tweewide: Fix most Shebang lines 2021-05-22 10:59:50 +02:00
drivers dmaengine: stedma40: add missing iounmap() on error in d40_probe() 2021-06-30 08:48:14 -04:00
firmware
fs afs: Fix an IS_ERR() vs NULL check 2021-06-30 08:48:14 -04:00
include HID: usbhid: fix info leak in hid_submit_ctrl 2021-06-30 08:48:10 -04:00
init pid: take a reference when initializing cad_pid 2021-06-10 13:24:06 +02:00
ipc
kernel tracing: Correct the length check which causes memory corruption 2021-06-16 11:55:02 +02:00
lib lib: stackdepot: turn depot_lock spinlock to raw_spinlock 2021-05-22 10:59:49 +02:00
LICENSES
mm mm/memory-failure: make sure wait for page writeback in memory_failure 2021-06-30 08:48:14 -04:00
net fib: Return the correct errno code 2021-06-30 08:48:13 -04:00
samples samples: vfio-mdev: fix error handing in mdpy_fb_probe() 2021-06-10 13:24:04 +02:00
scripts scripts: switch explicitly to Python 3 2021-05-22 10:59:50 +02:00
security security: commoncap: fix -Wstringop-overread warning 2021-05-22 10:59:21 +02:00
sound ASoC: sti-sas: add missing MODULE_DEVICE_TABLE 2021-06-16 11:54:57 +02:00
tools perf session: Correct buffer copying when peeking events 2021-06-16 11:55:01 +02:00
usr
virt KVM: arm64: Initialize VCPU mdcr_el2 before loading it 2021-05-22 10:59:50 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS Documentation/llvm: add documentation on building w/ Clang/LLVM 2020-09-26 18:01:31 +02:00
Makefile Linux 4.19.195 2021-06-16 11:55:02 +02:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.
See Documentation/00-INDEX for a list of what is contained in each file.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.