• Tetsuo Handa's avatar
    pipe: Fix pipe_full() test in opipe_prep(). · 566d1362
    Tetsuo Handa authored
    syzbot is reporting that splice()ing from non-empty read side to
    already-full write side causes unkillable task, for opipe_prep() is by
    error not inverting pipe_full() test.
    
      CPU: 0 PID: 9460 Comm: syz-executor.5 Not tainted 5.6.0-rc3-next-20200228-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:rol32 include/linux/bitops.h:105 [inline]
      RIP: 0010:iterate_chain_key kernel/locking/lockdep.c:369 [inline]
      RIP: 0010:__lock_acquire+0x6a3/0x5270 kernel/locking/lockdep.c:4178
      Call Trace:
         lock_acquire+0x197/0x420 kernel/locking/lockdep.c:4720
         __mutex_lock_common kernel/locking/mutex.c:956 [inline]
         __mutex_lock+0x156/0x13c0 kernel/locking/mutex.c:1103
         pipe_lock_nested fs/pipe.c:66 [inline]
         pipe_double_lock+0x1a0/0x1e0 fs/pipe.c:104
         splice_pipe_to_pipe fs/splice.c:1562 [inline]
         do_splice+0x35f/0x1520 fs/splice.c:1141
         __do_sys_splice fs/splice.c:1447 [inline]
         __se_sys_splice fs/splice.c:1427 [inline]
         __x64_sys_splice+0x2b5/0x320 fs/splice.c:1427
         do_syscall_64+0xf6/0x790 arch/x86/entry/common.c:295
         entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Reported-by: syzbot+b48daca8639150bc5e73@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?id=9386d051e11e09973d5a4cf79af5e8cedf79386d
    Fixes: 8cefc107 ("pipe: Use head and tail pointers for the ring, not cursor and length")
    Cc: stable@vger.kernel.org # 5.5+
    Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    566d1362
splice.c 40.9 KB