linux/drivers/target
Maurizio Lombardi fec1b2fa62 scsi: target: iscsi: Fix a race condition between login_work and the login thread
In case a malicious initiator sends some random data immediately after a
login PDU; the iscsi_target_sk_data_ready() callback will schedule the
login_work and, at the same time, the negotiation may end without clearing
the LOGIN_FLAGS_INITIAL_PDU flag (because no additional PDU exchanges are
required to complete the login).

The login has been completed but the login_work function will find the
LOGIN_FLAGS_INITIAL_PDU flag set and will never stop from rescheduling
itself; at this point, if the initiator drops the connection, the
iscsit_conn structure will be freed, login_work will dereference a released
socket structure and the kernel crashes.

BUG: kernel NULL pointer dereference, address: 0000000000000230
PF: supervisor write access in kernel mode
PF: error_code(0x0002) - not-present page
Workqueue: events iscsi_target_do_login_rx [iscsi_target_mod]
RIP: 0010:_raw_read_lock_bh+0x15/0x30
Call trace:
 iscsi_target_do_login_rx+0x75/0x3f0 [iscsi_target_mod]
 process_one_work+0x1e8/0x3c0

Fix this bug by forcing login_work to stop after the login has been
completed and the socket callbacks have been restored.

Add a comment to clearify the return values of iscsi_target_do_login()

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Link: https://lore.kernel.org/r/20221115125638.102517-1-mlombard@redhat.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2022-11-24 03:22:53 +00:00
..
iscsi scsi: target: iscsi: Fix a race condition between login_work and the login thread 2022-11-24 03:22:53 +00:00
loopback scsi: target: tcm_loop: Call scsi_done() directly 2021-10-16 21:31:43 -04:00
sbp scsi: target: sbp: Replace enable attr with ops.enable 2021-10-04 23:27:38 -04:00
tcm_fc scsi: target: tcm_fc: Fix a kernel-doc header 2021-04-15 22:44:41 -04:00
Kconfig scsi: core: Rename CONFIG_BLK_SCSI_REQUEST to CONFIG_SCSI_COMMON 2021-07-28 22:24:27 -04:00
Makefile
target_core_alua.c scsi: target: alua: Do not report emtpy port group 2022-09-15 21:42:44 -04:00
target_core_alua.h
target_core_configfs.c scsi: target: core: Send max transfer length in blocks 2022-11-24 02:16:19 +00:00
target_core_device.c scsi: target: core: Add emulate_rsoc attribute 2022-10-27 01:44:32 +00:00
target_core_fabric_configfs.c scsi: target: Use kstrtobool() instead of strtobool() 2022-11-08 03:53:37 +00:00
target_core_fabric_lib.c
target_core_file.c scsi: target: core: Send max transfer length in blocks 2022-11-24 02:16:19 +00:00
target_core_file.h
target_core_hba.c
target_core_iblock.c scsi: target: core: Make hw_max_sectors store the sectors amount in blocks 2022-11-24 02:16:19 +00:00
target_core_iblock.h
target_core_internal.h scsi: target: Remove unused se_tmr_req_cache declaration 2022-09-15 21:46:46 -04:00
target_core_pr.c scsi: target: core: De-RCU of se_lun and se_lun acl 2022-08-01 19:36:02 -04:00
target_core_pr.h scsi: target: core: Unify NAA identifier generation 2021-05-15 14:14:28 -04:00
target_core_pscsi.c SCSI misc on 20221007 2022-10-07 12:33:18 -07:00
target_core_pscsi.h scsi: target: pscsi: Remove struct pscsi_plugin_task 2022-03-01 22:21:49 -05:00
target_core_rd.c scsi: target: Add the DUMMY flag to rd_mcp 2021-04-05 23:26:38 -04:00
target_core_rd.h scsi: target: Add the DUMMY flag to rd_mcp 2021-04-05 23:26:38 -04:00
target_core_sbc.c scsi: target: Remove the unused function transport_lba_64_ext() 2022-10-22 02:58:13 +00:00
target_core_spc.c scsi: target: core: Send max transfer length in blocks 2022-11-24 02:16:19 +00:00
target_core_stat.c scsi: target: core: De-RCU of se_lun and se_lun acl 2022-08-01 19:36:02 -04:00
target_core_tmr.c scsi: target: core: Remove from tmr_list during LUN unlink 2021-10-26 23:15:23 -04:00
target_core_tpg.c
target_core_transport.c scsi: target: core: Remove from tmr_list during LUN unlink 2021-10-26 23:15:23 -04:00
target_core_ua.c
target_core_ua.h
target_core_user.c genetlink: start to validate reserved header bytes 2022-08-29 12:47:15 +01:00
target_core_xcopy.c scsi: target: core: Change the way target_xcopy_do_work() sets restiction on max I/O 2022-11-24 02:16:19 +00:00
target_core_xcopy.h scsi: target: core: Change the way target_xcopy_do_work() sets restiction on max I/O 2022-11-24 02:16:19 +00:00