Tony Battersby 3455607fd7 scsi: sg: Allow waiting for commands to complete on removed device
When a SCSI device is removed while in active use, currently sg will
immediately return -ENODEV on any attempt to wait for active commands that
were sent before the removal.  This is problematic for commands that use
SG_FLAG_DIRECT_IO since the data buffer may still be in use by the kernel
when userspace frees or reuses it after getting ENODEV, leading to
corrupted userspace memory (in the case of READ-type commands) or corrupted
data being sent to the device (in the case of WRITE-type commands).  This
has been seen in practice when logging out of a iscsi_tcp session, where
the iSCSI driver may still be processing commands after the device has been
marked for removal.

Change the policy to allow userspace to wait for active sg commands even
when the device is being removed.  Return -ENODEV only when there are no
more responses to read.

Link: https://lore.kernel.org/r/5ebea46f-fe83-2d0b-233d-d0dcb362dd0a@cybernetics.com
Cc: <stable@vger.kernel.org>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2022-07-18 22:33:04 -04:00
..
2022-05-23 23:24:09 -04:00
2022-05-23 23:24:10 -04:00
2022-05-23 23:24:10 -04:00
2022-06-21 21:40:11 -04:00
2022-02-22 21:11:02 -05:00
2022-01-14 14:37:34 +01:00
2022-02-22 21:11:02 -05:00
2021-04-13 00:20:48 -04:00
2022-06-27 22:56:21 -04:00
2022-06-27 22:56:21 -04:00
2022-01-25 00:09:41 -05:00
2022-02-22 21:11:02 -05:00
2022-01-22 08:33:37 +02:00
2022-05-02 16:59:11 -04:00
2022-05-08 14:28:18 -04:00
2021-12-22 23:41:13 -05:00
2021-04-13 00:20:48 -04:00