• M
    mm: fix readahead_page_batch for retry entries · 4349a83a
    Matthew Wilcox (Oracle) 提交于
    Both btrfs and fuse have reported faults caused by seeing a retry entry
    instead of the page they were looking for.  This was caused by a missing
    check in the iterator.
    
    As can be seen in the below panic log, the accessing 0x402 causes a
    panic.  In the xarray.h, 0x402 means RETRY_ENTRY.
    
      BUG: kernel NULL pointer dereference, address: 0000000000000402
      CPU: 14 PID: 306003 Comm: as Not tainted 5.9.0-1-amd64 #1 Debian 5.9.1-1
      Hardware name: Lenovo ThinkSystem SR665/7D2VCTO1WW, BIOS D8E106Q-1.01 05/30/2020
      RIP: 0010:fuse_readahead+0x152/0x470 [fuse]
      Code: 41 8b 57 18 4c 8d 54 10 ff 4c 89 d6 48 8d 7c 24 10 e8 d2 e3 28 f9 48 85 c0 0f 84 fe 00 00 00 44 89 f2 49 89 04 d4 44 8d 72 01 <48> 8b 10 41 8b 4f 1c 48 c1 ea 10 83 e2 01 80 fa 01 19 d2 81 e2 01
      RSP: 0018:ffffad99ceaebc50 EFLAGS: 00010246
      RAX: 0000000000000402 RBX: 0000000000000001 RCX: 0000000000000002
      RDX: 0000000000000000 RSI: ffff94c5af90bd98 RDI: ffffad99ceaebc60
      RBP: ffff94ddc1749a00 R08: 0000000000000402 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000100 R12: ffff94de6c429ce0
      R13: ffff94de6c4d3700 R14: 0000000000000001 R15: ffffad99ceaebd68
      FS:  00007f228c5c7040(0000) GS:ffff94de8ed80000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000402 CR3: 0000001dbd9b4000 CR4: 0000000000350ee0
      Call Trace:
        read_pages+0x83/0x270
        page_cache_readahead_unbounded+0x197/0x230
        generic_file_buffered_read+0x57a/0xa20
        new_sync_read+0x112/0x1a0
        vfs_read+0xf8/0x180
        ksys_read+0x5f/0xe0
        do_syscall_64+0x33/0x80
        entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes: 042124cc ("mm: add new readahead_control API")
    Reported-by: NDavid Sterba <dsterba@suse.com>
    Reported-by: NWonhyuk Yang <vvghjk1234@gmail.com>
    Signed-off-by: NMatthew Wilcox (Oracle) <willy@infradead.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/20201103142852.8543-1-willy@infradead.org
    Link: https://lkml.kernel.org/r/20201103124349.16722-1-vvghjk1234@gmail.comSigned-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4349a83a
pagemap.h 29.8 KB