Jens Axboe
8706e04ed7
io_uring: always delete double poll wait entry on match
...
syzbot reports a crash with tty polling, which is using the double poll
handling:
general protection fault, probably for non-canonical address 0xdffffc0000000009: 0000 [#1 ] PREEMPT SMP KASAN
KASAN: null-ptr-deref in range [0x0000000000000048-0x000000000000004f]
CPU: 0 PID: 6874 Comm: syz-executor749 Not tainted 5.9.0-rc6-next-20200924-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:io_poll_get_single fs/io_uring.c:4778 [inline]
RIP: 0010:io_poll_double_wake+0x51/0x510 fs/io_uring.c:4845
Code: fc ff df 48 c1 ea 03 80 3c 02 00 0f 85 9e 03 00 00 48 b8 00 00 00 00 00 fc ff df 49 8b 5d 08 48 8d 7b 48 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 06 0f 8e 63 03 00 00 0f b6 6b 48 bf 06 00 00
RSP: 0018:ffffc90001c1fb70 EFLAGS: 00010006
RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000004
RDX: 0000000000000009 RSI: ffffffff81d9b3ad RDI: 0000000000000048
RBP: dffffc0000000000 R08: ffff8880a3cac798 R09: ffffc90001c1fc60
R10: fffff52000383f73 R11: 0000000000000000 R12: 0000000000000004
R13: ffff8880a3cac798 R14: ffff8880a3cac7a0 R15: 0000000000000004
FS: 0000000001f98880(0000) GS:ffff8880ae400000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f18886916c0 CR3: 0000000094c5a000 CR4: 00000000001506f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
__wake_up_common+0x147/0x650 kernel/sched/wait.c:93
__wake_up_common_lock+0xd0/0x130 kernel/sched/wait.c:123
tty_ldisc_hangup+0x1cf/0x680 drivers/tty/tty_ldisc.c:735
__tty_hangup.part.0+0x403/0x870 drivers/tty/tty_io.c:625
__tty_hangup drivers/tty/tty_io.c:575 [inline]
tty_vhangup+0x1d/0x30 drivers/tty/tty_io.c:698
pty_close+0x3f5/0x550 drivers/tty/pty.c:79
tty_release+0x455/0xf60 drivers/tty/tty_io.c:1679
__fput+0x285/0x920 fs/file_table.c:281
task_work_run+0xdd/0x190 kernel/task_work.c:141
tracehook_notify_resume include/linux/tracehook.h:188 [inline]
exit_to_user_mode_loop kernel/entry/common.c:165 [inline]
exit_to_user_mode_prepare+0x1e2/0x1f0 kernel/entry/common.c:192
syscall_exit_to_user_mode+0x7a/0x2c0 kernel/entry/common.c:267
entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x401210
which is due to a failure in removing the double poll wait entry if we
hit a wakeup match. This can cause multiple invocations of the wakeup,
which isn't safe.
Cc: stable@vger.kernel.org # v5.8
Reported-by: syzbot+81b3883093f772addf6d@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-09-28 08:38:54 -06:00
..
2020-07-31 07:28:25 +02:00
2020-06-24 09:16:02 -06:00
2020-06-24 09:16:02 -06:00
2020-08-04 13:49:43 -07:00
2020-08-14 19:56:56 -07:00
2020-06-24 09:16:02 -06:00
2020-04-20 15:45:22 -06:00
2020-08-13 12:26:18 -07:00
2020-07-08 08:27:56 +02:00
2020-08-05 17:47:07 +02:00
2020-08-15 08:31:39 -07:00
2020-05-05 09:22:21 -06:00
2020-06-01 15:45:27 -07:00
2020-04-20 15:45:22 -06:00
2020-08-07 11:33:22 -07:00
2020-08-05 20:13:21 -07:00
2020-08-06 19:44:25 -07:00
2020-08-07 11:33:22 -07:00
2020-07-09 10:14:29 +03:00
2020-06-24 09:16:02 -06:00
2020-08-06 19:22:51 -07:00
2020-08-12 08:31:13 +09:00
2020-07-27 10:58:06 +02:00
2020-08-06 19:35:12 -07:00
2020-08-10 18:33:22 -07:00
2020-08-12 10:58:01 -07:00
2020-06-03 16:27:18 -07:00
2020-08-11 14:34:17 -07:00
2020-08-10 18:22:43 -07:00
2020-06-24 09:16:02 -06:00
2020-07-16 12:35:15 -07:00
2020-03-29 23:23:00 +02:00
2020-06-06 10:08:17 -07:00
2020-08-12 10:57:56 -07:00
2020-08-05 09:24:16 -07:00
2020-08-04 13:49:43 -07:00
2020-06-15 09:32:10 -07:00
2020-08-10 18:20:04 -07:00
2020-06-24 09:16:02 -06:00
2020-07-27 23:15:48 +02:00
2020-02-04 03:05:26 +00:00
2020-08-12 10:58:00 -07:00
2020-08-15 08:26:55 -07:00
2020-08-09 13:58:04 -07:00
2020-08-12 10:58:01 -07:00
2020-06-14 01:57:21 +09:00
2020-07-28 10:58:07 +02:00
2020-08-07 11:33:21 -07:00
2020-08-07 21:14:30 -07:00
2020-07-16 12:35:15 -07:00
2020-08-04 15:01:58 -04:00
2020-08-04 13:49:43 -07:00
2020-08-12 10:57:56 -07:00
2020-07-06 19:42:31 -07:00
2020-06-02 10:59:07 -07:00
2020-08-06 19:28:26 -07:00
2020-02-07 14:48:37 -05:00
2020-08-06 19:28:26 -07:00
2020-06-14 01:57:21 +09:00
2020-07-24 12:42:41 -07:00
2020-06-05 14:05:57 -07:00
2020-04-20 15:45:22 -06:00
2020-08-10 18:20:04 -07:00
2020-08-06 19:28:26 -07:00
2020-08-12 10:58:01 -07:00
2020-03-25 11:50:48 +01:00
2020-05-07 08:45:47 -06:00
2020-07-21 16:02:41 -07:00
2020-08-13 12:22:19 -07:00
2020-08-11 17:42:24 +09:00
2020-08-07 11:33:27 -07:00
2020-06-03 23:16:55 -04:00
2020-05-07 16:55:47 -05:00
2020-08-07 13:29:39 -07:00
2020-07-27 14:29:23 -04:00
2020-06-04 19:18:29 -07:00
2020-06-10 16:02:54 -07:00
2020-06-04 19:18:29 -07:00
2020-06-04 19:18:29 -07:00
2020-08-03 13:01:22 -07:00
2020-08-03 11:57:03 -07:00
2020-05-14 16:44:23 +02:00
2020-06-05 13:45:21 -07:00
2020-08-12 10:58:01 -07:00
2020-07-30 18:14:33 -06:00
2020-07-29 16:14:27 +02:00
2020-07-01 08:08:20 -06:00
2020-04-27 02:07:40 -04:00
2020-05-06 22:33:43 -04:00
2020-05-14 10:00:35 -07:00
2020-08-12 10:58:04 -07:00
2020-03-03 10:55:06 -05:00
2020-06-29 09:40:55 -07:00
2020-08-07 09:40:34 -07:00
2020-04-10 15:36:22 -07:00
2020-05-14 16:44:25 +02:00
2020-04-02 09:35:26 -07:00
2020-07-29 16:14:27 +02:00
2020-06-05 16:19:28 -07:00
2020-02-07 14:48:35 -05:00
2020-08-04 21:02:38 -04:00
2020-06-05 16:26:36 -07:00
2020-08-07 09:40:34 -07:00
2020-09-28 08:38:54 -06:00
2020-08-23 11:38:50 -06:00
2020-07-24 13:00:44 -06:00
2020-07-31 08:16:01 +02:00
2020-08-07 11:33:24 -07:00
2020-06-14 01:57:21 +09:00
2020-05-22 08:45:46 -06:00
2020-08-09 13:58:04 -07:00
2020-07-31 08:17:51 +02:00
2020-05-14 16:44:24 +02:00
2020-06-02 10:59:07 -07:00
2020-08-14 19:56:56 -07:00
2020-08-07 21:03:25 -07:00
2020-05-13 11:41:22 +02:00
2020-08-12 10:58:01 -07:00
2020-06-13 09:56:21 -07:00
2020-04-27 10:37:14 -04:00
2020-06-08 11:04:19 -07:00
2020-06-04 13:54:34 -07:00
2020-07-30 08:22:47 +02:00
2020-07-31 08:16:00 +02:00
2020-05-29 19:10:42 -04:00
2020-06-04 19:06:25 -07:00
2020-08-12 10:58:01 -07:00
2020-06-13 09:56:21 -07:00
2020-06-02 19:45:12 -07:00
2020-06-10 16:09:11 -07:00
2020-06-09 15:40:50 -07:00
2020-08-10 19:07:44 -07:00
2020-07-31 08:16:01 +02:00
2020-07-13 17:27:03 -04:00