]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: target: spc: Fix loop traversal in spc_rsoc_get_descr()
authorChaohai Chen <wdhh66@163.com>
Fri, 24 Jan 2025 08:55:42 +0000 (16:55 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 13 Feb 2025 01:50:00 +0000 (20:50 -0500)
Stop traversing after finding the appropriate descriptor.

Signed-off-by: Chaohai Chen <wdhh66@163.com>
Link: https://lore.kernel.org/r/20250124085542.109088-1-wdhh66@163.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_spc.c

index 61c065702350e056baf4b1009fd51643d9397e40..701dcbd7b63cf0c81dbc0065a161030a75e21140 100644 (file)
@@ -2151,8 +2151,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
                        if (descr->serv_action_valid)
                                return TCM_INVALID_CDB_FIELD;
 
-                       if (!descr->enabled || descr->enabled(descr, cmd))
+                       if (!descr->enabled || descr->enabled(descr, cmd)) {
                                *opcode = descr;
+                               return TCM_NO_SENSE;
+                       }
                        break;
                case 0x2:
                        /*
@@ -2166,8 +2168,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
                        if (descr->serv_action_valid &&
                            descr->service_action == requested_sa) {
                                if (!descr->enabled || descr->enabled(descr,
-                                                                     cmd))
+                                                                     cmd)) {
                                        *opcode = descr;
+                                       return TCM_NO_SENSE;
+                               }
                        } else if (!descr->serv_action_valid)
                                return TCM_INVALID_CDB_FIELD;
                        break;
@@ -2180,13 +2184,15 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
                         */
                        if (descr->service_action == requested_sa)
                                if (!descr->enabled || descr->enabled(descr,
-                                                                     cmd))
+                                                                     cmd)) {
                                        *opcode = descr;
+                                       return TCM_NO_SENSE;
+                               }
                        break;
                }
        }
 
-       return 0;
+       return TCM_NO_SENSE;
 }
 
 static sense_reason_t