Jason Yan
d9a434fa0c
scsi: core: Fix warning in scsi_alloc_sgtables()
...
As explained in SG_IO howto[1]:
"If iovec_count is non-zero then 'dxfer_len' should be equal to the sum of
iov_len lengths. If not, the minimum of the two is the transfer length."
When iovec_count is non-zero and dxfer_len is zero, the sg_io() just
genarated a null bio, and finally caused a warning below. To fix it, skip
generating a bio for this request if dxfer_len is zero.
[1] https://tldp.org/HOWTO/SCSI-Generic-HOWTO/x198.html
WARNING: CPU: 2 PID: 3643 at drivers/scsi/scsi_lib.c:1032 scsi_alloc_sgtables+0xc7d/0xf70 drivers/scsi/scsi_lib.c:1032
Modules linked in:
CPU: 2 PID: 3643 Comm: syz-executor397 Not tainted
5.17.0-rc3-syzkaller-00316-gb81b1829e7e3 #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-204/01/2014
RIP: 0010:scsi_alloc_sgtables+0xc7d/0xf70 drivers/scsi/scsi_lib.c:1032
Code: e7 fc 31 ff 44 89 f6 e8 c1 4e e7 fc 45 85 f6 0f 84 1a f5 ff ff e8
93 4c e7 fc 83 c5 01 0f b7 ed e9 0f f5 ff ff e8 83 4c e7 fc <0f> 0b 41
bc 0a 00 00 00 e9 2b fb ff ff 41 bc 09 00 00 00 e9 20 fb
RSP: 0018:ffffc90000d07558 EFLAGS: 00010293
RAX: 0000000000000000 RBX: ffff88801bfc96a0 RCX: 0000000000000000
RDX: ffff88801c876000 RSI: ffffffff849060bd RDI: 0000000000000003
RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
R10: ffffffff849055b9 R11: 0000000000000000 R12: ffff888012b8c000
R13: ffff88801bfc9580 R14: 0000000000000000 R15: ffff88801432c000
FS: 00007effdec8e700(0000) GS:ffff88802cc00000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007effdec6d718 CR3: 00000000206d6000 CR4: 0000000000150ee0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
scsi_setup_scsi_cmnd drivers/scsi/scsi_lib.c:1219 [inline]
scsi_prepare_cmd drivers/scsi/scsi_lib.c:1614 [inline]
scsi_queue_rq+0x283e/0x3630 drivers/scsi/scsi_lib.c:1730
blk_mq_dispatch_rq_list+0x6ea/0x22e0 block/blk-mq.c:1851
__blk_mq_sched_dispatch_requests+0x20b/0x410 block/blk-mq-sched.c:299
blk_mq_sched_dispatch_requests+0xfb/0x180 block/blk-mq-sched.c:332
__blk_mq_run_hw_queue+0xf9/0x350 block/blk-mq.c:1968
__blk_mq_delay_run_hw_queue+0x5b6/0x6c0 block/blk-mq.c:2045
blk_mq_run_hw_queue+0x30f/0x480 block/blk-mq.c:2096
blk_mq_sched_insert_request+0x340/0x440 block/blk-mq-sched.c:451
blk_execute_rq+0xcc/0x340 block/blk-mq.c:1231
sg_io+0x67c/0x1210 drivers/scsi/scsi_ioctl.c:485
scsi_ioctl_sg_io drivers/scsi/scsi_ioctl.c:866 [inline]
scsi_ioctl+0xa66/0x1560 drivers/scsi/scsi_ioctl.c:921
sd_ioctl+0x199/0x2a0 drivers/scsi/sd.c:1576
blkdev_ioctl+0x37a/0x800 block/ioctl.c:588
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:874 [inline]
__se_sys_ioctl fs/ioctl.c:860 [inline]
__x64_sys_ioctl+0x193/0x200 fs/ioctl.c:860
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x44/0xae
RIP: 0033:0x7effdecdc5d9
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 81 14 00 00 90 48 89 f8 48 89
f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01
f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007effdec8e2f8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007effded664c0 RCX: 00007effdecdc5d9
RDX: 0000000020002300 RSI: 0000000000002285 RDI: 0000000000000004
RBP: 00007effded34034 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003
R13: 00007effded34054 R14: 2f30656c69662f2e R15: 00007effded664c8
Link: https://lore.kernel.org/r/20220720025120.3226770-1-yanaijie@huawei.com
Fixes: 25636e282fe9 ("block: fix SG_IO vector request data length handling")
Reported-by: syzbot+d44b35ecfb807e5af0b5@syzkaller.appspotmail.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jason Yan <yanaijie@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2022-07-26 21:54:30 -04:00
..
2022-04-25 23:23:05 -04:00
2022-03-30 00:00:59 -04:00
2022-02-19 15:59:34 -05:00
2021-10-16 21:45:54 -04:00
2022-02-22 21:11:03 -05:00
2022-02-22 21:11:04 -05:00
2022-04-25 23:38:38 -04:00
2022-05-16 21:26:50 -04:00
2022-04-11 22:09:35 -04:00
2022-02-22 21:11:04 -05:00
2022-04-11 22:09:35 -04:00
2022-02-22 21:11:08 -05:00
2022-05-02 19:52:13 -04:00
2022-02-17 07:00:39 -06:00
2022-05-19 20:16:27 -04:00
2022-05-23 23:24:09 -04:00
2022-05-25 19:09:48 -07:00
2022-05-19 20:16:26 -04:00
2022-06-27 22:43:57 -04:00
2022-06-16 21:42:04 -04:00
2022-03-29 23:39:24 -04:00
2022-05-23 23:24:10 -04:00
2022-05-16 21:26:50 -04:00
2022-05-19 20:16:25 -04:00
2022-06-07 21:38:18 -04:00
2022-07-13 22:57:03 -04:00
2022-06-01 22:43:26 -04:00
2022-07-26 21:40:43 -04:00
2022-04-06 22:27:08 -04:00
2022-04-06 22:11:52 -04:00
2022-07-13 23:27:59 -04:00
2022-05-23 23:24:10 -04:00
2022-04-11 22:09:35 -04:00
2022-06-05 09:25:12 -07:00
2022-04-25 23:33:36 -04:00
2022-05-23 23:24:10 -04:00
2021-12-22 23:43:23 -05:00
2022-02-22 21:11:07 -05:00
2021-10-16 21:45:53 -04:00
2021-05-15 18:01:34 -04:00
2022-01-24 23:30:28 -05:00
2021-10-18 22:38:34 -04:00
2022-02-22 21:11:03 -05:00
2021-05-07 00:26:34 -07:00
2021-11-29 23:02:13 -05:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:03 -05:00
2022-03-29 23:42:18 -04:00
2022-04-25 23:25:11 -04:00
2022-02-22 21:11:02 -05:00
2022-02-22 21:11:03 -05:00
2021-11-29 23:02:13 -05:00
2021-10-16 21:32:16 -04:00
2021-05-14 22:19:04 -04:00
2022-01-14 14:37:34 +01:00
2021-06-02 23:09:39 -04:00
2022-04-26 08:51:56 -04:00
2022-02-22 21:11:03 -05:00
2022-05-19 20:16:27 -04:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:04 -05:00
2021-06-02 01:37:04 -04:00
2022-02-22 21:11:03 -05:00
2022-02-22 21:11:07 -05:00
2022-04-26 08:10:35 -04:00
2021-12-13 23:34:01 -05:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:04 -05:00
2022-02-22 21:11:05 -05:00
2022-02-22 21:11:05 -05:00
2022-06-07 22:05:14 -04:00
2021-06-29 16:46:08 -04:00
2022-02-22 21:11:02 -05:00
2021-05-07 00:26:34 -07:00
2022-02-22 21:11:04 -05:00
2022-05-19 20:27:37 -04:00
2021-08-30 10:18:25 +02:00
2022-04-11 22:09:35 -04:00
2022-04-11 22:09:35 -04:00
2022-04-25 23:23:05 -04:00
2022-02-27 21:35:30 -05:00
2022-02-22 21:11:03 -05:00
2022-05-19 20:27:37 -04:00
2022-04-26 09:02:44 -04:00
2022-02-22 21:11:05 -05:00
2022-02-27 21:34:02 -05:00
2022-02-27 21:34:02 -05:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:06 -05:00
2022-02-22 21:11:06 -05:00
2022-05-23 23:24:10 -04:00
2022-01-25 00:09:41 -05:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:03 -05:00
2022-02-22 21:11:03 -05:00
2022-02-22 21:11:06 -05:00
2022-02-22 21:11:06 -05:00
2022-06-07 22:05:14 -04:00
2022-03-29 23:32:26 -04:00
2022-02-22 21:11:06 -05:00
2021-10-16 21:32:16 -04:00
2022-05-19 20:26:21 -04:00
2022-02-22 21:11:06 -05:00
2022-02-22 21:11:02 -05:00
2022-02-22 21:11:02 -05:00
2021-10-16 21:32:16 -04:00
2022-03-15 14:05:02 -04:00
2021-07-28 22:24:27 -04:00
2022-06-10 12:50:05 -04:00
2022-03-01 22:21:50 -05:00
2021-07-21 23:49:02 -04:00
2022-05-28 06:15:27 -06:00
2022-07-26 21:54:30 -04:00
2022-06-01 22:38:53 -04:00
2022-03-29 23:29:19 -04:00
2021-12-22 23:38:29 -05:00
2021-11-29 23:02:15 -05:00
2022-01-22 08:33:37 +02:00
2022-05-02 16:59:11 -04:00
2022-05-23 23:24:10 -04:00
2022-03-01 23:56:27 -05:00
2022-06-13 22:11:36 -04:00
2022-03-01 22:21:50 -05:00
2021-08-11 22:25:37 -04:00
2022-05-02 16:59:11 -04:00
2022-05-08 14:28:18 -04:00
2022-05-02 16:59:11 -04:00
2022-06-01 22:36:44 -04:00
2022-06-07 21:26:29 -04:00
2022-06-01 22:36:44 -04:00
2021-09-28 22:42:06 -04:00
2022-05-28 06:15:27 -06:00
2022-02-22 21:11:07 -05:00
2021-05-07 00:26:34 -07:00
2022-04-18 22:48:31 -04:00
2021-12-22 23:41:13 -05:00
2022-05-02 16:59:12 -04:00
2022-03-08 19:40:01 -07:00
2022-05-28 06:15:27 -06:00
2022-03-08 19:40:00 -07:00
2021-10-16 21:32:16 -04:00
2022-06-16 21:36:03 -04:00
2022-02-22 21:11:03 -05:00
2022-03-29 23:49:56 -04:00
2022-04-06 23:01:54 -04:00
2022-06-07 21:30:56 -04:00
2022-02-22 21:11:07 -05:00
2022-02-22 21:11:07 -05:00
2022-03-01 23:56:28 -05:00
2022-02-22 21:11:07 -05:00
2022-05-19 14:22:03 +02:00
2022-02-22 21:11:07 -05:00
2022-03-30 00:05:42 -04:00