kernel_samsung_a53x/include/scsi
Bart Van Assche 7be7fa0f35 scsi: core: Fix a use-after-free
commit 8fe4ce5836e932f5766317cb651c1ff2a4cd0506 upstream.

There are two .exit_cmd_priv implementations. Both implementations use
resources associated with the SCSI host. Make sure that these resources are
still available when .exit_cmd_priv is called by waiting inside
scsi_remove_host() until the tag set has been freed.

This commit fixes the following use-after-free:

==================================================================
BUG: KASAN: use-after-free in srp_exit_cmd_priv+0x27/0xd0 [ib_srp]
Read of size 8 at addr ffff888100337000 by task multipathd/16727
Call Trace:
 <TASK>
 dump_stack_lvl+0x34/0x44
 print_report.cold+0x5e/0x5db
 kasan_report+0xab/0x120
 srp_exit_cmd_priv+0x27/0xd0 [ib_srp]
 scsi_mq_exit_request+0x4d/0x70
 blk_mq_free_rqs+0x143/0x410
 __blk_mq_free_map_and_rqs+0x6e/0x100
 blk_mq_free_tag_set+0x2b/0x160
 scsi_host_dev_release+0xf3/0x1a0
 device_release+0x54/0xe0
 kobject_put+0xa5/0x120
 device_release+0x54/0xe0
 kobject_put+0xa5/0x120
 scsi_device_dev_release_usercontext+0x4c1/0x4e0
 execute_in_process_context+0x23/0x90
 device_release+0x54/0xe0
 kobject_put+0xa5/0x120
 scsi_disk_release+0x3f/0x50
 device_release+0x54/0xe0
 kobject_put+0xa5/0x120
 disk_release+0x17f/0x1b0
 device_release+0x54/0xe0
 kobject_put+0xa5/0x120
 dm_put_table_device+0xa3/0x160 [dm_mod]
 dm_put_device+0xd0/0x140 [dm_mod]
 free_priority_group+0xd8/0x110 [dm_multipath]
 free_multipath+0x94/0xe0 [dm_multipath]
 dm_table_destroy+0xa2/0x1e0 [dm_mod]
 __dm_destroy+0x196/0x350 [dm_mod]
 dev_remove+0x10c/0x160 [dm_mod]
 ctl_ioctl+0x2c2/0x590 [dm_mod]
 dm_ctl_ioctl+0x5/0x10 [dm_mod]
 __x64_sys_ioctl+0xb4/0xf0
 dm_ctl_ioctl+0x5/0x10 [dm_mod]
 __x64_sys_ioctl+0xb4/0xf0
 do_syscall_64+0x3b/0x90
 entry_SYSCALL_64_after_hwframe+0x46/0xb0

Link: https://lore.kernel.org/r/20220826002635.919423-1-bvanassche@acm.org
Fixes: 65ca846a5314 ("scsi: core: Introduce {init,exit}_cmd_priv()")
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Mike Christie <michael.christie@oracle.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: John Garry <john.garry@huawei.com>
Cc: Li Zhijian <lizhijian@fujitsu.com>
Reported-by: Li Zhijian <lizhijian@fujitsu.com>
Tested-by: Li Zhijian <lizhijian@fujitsu.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[mheyne: fixed contextual conflicts:
  - drivers/scsi/hosts.c: due to missing commit 973dac8a8a14 ("scsi: core: Refine how we set tag_set NUMA node")
  - drivers/scsi/scsi_sysfs.c: due to missing commit 6f8191fdf41d ("block: simplify disk shutdown")
  - drivers/scsi/scsi_scan.c: due to missing commit 59506abe5e34 ("scsi: core: Inline scsi_mq_alloc_queue()")]
Signed-off-by: Maximilian Heyne <mheyne@amazon.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-19 14:19:51 +01:00
..
fc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fc_encode.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fc_frame.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fcoe_sysfs.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iscsi_if.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iscsi_proto.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iser.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
libfc.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
libfcoe.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
libiscsi.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
libiscsi_tcp.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
libsas.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sas.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sas_ata.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi.h scsi: core: Introduce enum scsi_disposition 2024-11-18 12:13:21 +01:00
scsi_bsg_iscsi.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_cmnd.h Revert "scsi: core: Add scsi_prot_ref_tag() helper" 2024-11-18 12:12:05 +01:00
scsi_common.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_dbg.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_device.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_devinfo.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_dh.h scsi: core: Introduce enum scsi_disposition 2024-11-18 12:13:21 +01:00
scsi_driver.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_eh.h scsi: core: Introduce enum scsi_disposition 2024-11-18 12:13:21 +01:00
scsi_host.h scsi: core: Fix a use-after-free 2024-11-19 14:19:51 +01:00
scsi_ioctl.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_proto.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_request.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_tcq.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport_fc.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport_iscsi.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport_sas.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport_spi.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsi_transport_srp.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
scsicam.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sg.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
srp.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
viosrp.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00