]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: iscsi: Fix incorrect error path labels for flashnode operations
authorAlok Tiwari <alok.a.tiwari@oracle.com>
Fri, 30 May 2025 19:29:35 +0000 (12:29 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Jun 2025 10:05:19 +0000 (11:05 +0100)
[ Upstream commit 9b17621366d210ffee83262a8754086ebbde5e55 ]

Correct the error handling goto labels used when host lookup fails in
various flashnode-related event handlers:

 - iscsi_new_flashnode()
 - iscsi_del_flashnode()
 - iscsi_login_flashnode()
 - iscsi_logout_flashnode()
 - iscsi_logout_flashnode_sid()

scsi_host_put() is not required when shost is NULL, so jumping to the
correct label avoids unnecessary operations. These functions previously
jumped to the wrong goto label (put_host), which did not match the
intended cleanup logic.

Use the correct exit labels (exit_new_fnode, exit_del_fnode, etc.) to
ensure proper error handling.  Also remove the unused put_host label
under iscsi_new_flashnode() as it is no longer needed.

No functional changes beyond accurate error path correction.

Fixes: c6a4bb2ef596 ("[SCSI] scsi_transport_iscsi: Add flash node mgmt support")
Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
Link: https://lore.kernel.org/r/20250530193012.3312911-1-alok.a.tiwari@oracle.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/scsi_transport_iscsi.c

index 8930acdff08c5ca5a8d168da580b938c3fa1c7f9..91998e1df94d379cfc7e9112d936c63f51286d49 100644 (file)
@@ -3545,7 +3545,7 @@ static int iscsi_new_flashnode(struct iscsi_transport *transport,
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.new_flashnode.host_no);
                err = -ENODEV;
-               goto put_host;
+               goto exit_new_fnode;
        }
 
        index = transport->new_flashnode(shost, data, len);
@@ -3555,7 +3555,6 @@ static int iscsi_new_flashnode(struct iscsi_transport *transport,
        else
                err = -EIO;
 
-put_host:
        scsi_host_put(shost);
 
 exit_new_fnode:
@@ -3580,7 +3579,7 @@ static int iscsi_del_flashnode(struct iscsi_transport *transport,
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.del_flashnode.host_no);
                err = -ENODEV;
-               goto put_host;
+               goto exit_del_fnode;
        }
 
        idx = ev->u.del_flashnode.flashnode_idx;
@@ -3622,7 +3621,7 @@ static int iscsi_login_flashnode(struct iscsi_transport *transport,
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.login_flashnode.host_no);
                err = -ENODEV;
-               goto put_host;
+               goto exit_login_fnode;
        }
 
        idx = ev->u.login_flashnode.flashnode_idx;
@@ -3674,7 +3673,7 @@ static int iscsi_logout_flashnode(struct iscsi_transport *transport,
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.logout_flashnode.host_no);
                err = -ENODEV;
-               goto put_host;
+               goto exit_logout_fnode;
        }
 
        idx = ev->u.logout_flashnode.flashnode_idx;
@@ -3724,7 +3723,7 @@ static int iscsi_logout_flashnode_sid(struct iscsi_transport *transport,
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.logout_flashnode.host_no);
                err = -ENODEV;
-               goto put_host;
+               goto exit_logout_sid;
        }
 
        session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid);