Skip to content

Commit dd0a66a

Browse files
logostmartinkpetersen
authored andcommitted
scsi: target: core: Fix race during ACL removal
Under huge load there is a possibility of race condition in updating se_dev_entry object in ACL removal procedure: NIP [c0080000154093d0] transport_lookup_cmd_lun+0x1f8/0x3d0 [target_core_mod] LR [c00800001542ab34] target_submit_cmd_map_sgls+0x11c/0x300 [target_core_mod] Call Trace: target_submit_cmd_map_sgls+0x11c/0x300 [target_core_mod] target_submit_cmd+0x44/0x60 [target_core_mod] tcm_qla2xxx_handle_cmd+0x88/0xe0 [tcm_qla2xxx] qlt_do_work+0x2e4/0x3d0 [qla2xxx] process_one_work+0x298/0x5c Despite usage of RCU primitives with deve->se_lun pointer, it has not become dereference-safe because deve->se_lun is updated and not synchronized with a reader. That change might be in a release function called by synchronize_rcu(). But, in fact, there is no point in setting that pointer to NULL for deleting deve. All access to deve->se_lun is already under rcu_read_lock. And either deve->se_lun is always valid or deve is not valid itself and will not be found in the list_for_*. The same applicable for deve->se_lun_acl too. So a better solution is to remove that NULLing. Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Mike Christie <[email protected]> Signed-off-by: Dmitry Bogdanov <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 00511d2 commit dd0a66a

File tree

1 file changed

+0
-3
lines changed

1 file changed

+0
-3
lines changed

drivers/target/target_core_device.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -434,9 +434,6 @@ void core_disable_device_list_for_node(
434434
kref_put(&orig->pr_kref, target_pr_kref_release);
435435
wait_for_completion(&orig->pr_comp);
436436

437-
rcu_assign_pointer(orig->se_lun, NULL);
438-
rcu_assign_pointer(orig->se_lun_acl, NULL);
439-
440437
kfree_rcu(orig, rcu_head);
441438

442439
core_scsi3_free_pr_reg_from_nacl(dev, nacl);

0 commit comments

Comments
 (0)