Skip to content

Commit 04ad06e

Browse files
Chaohai Chenmartinkpetersen
authored andcommitted
scsi: target: spc: Fix loop traversal in spc_rsoc_get_descr()
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>
1 parent b505323 commit 04ad06e

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

drivers/target/target_core_spc.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,8 +2151,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
21512151
if (descr->serv_action_valid)
21522152
return TCM_INVALID_CDB_FIELD;
21532153

2154-
if (!descr->enabled || descr->enabled(descr, cmd))
2154+
if (!descr->enabled || descr->enabled(descr, cmd)) {
21552155
*opcode = descr;
2156+
return TCM_NO_SENSE;
2157+
}
21562158
break;
21572159
case 0x2:
21582160
/*
@@ -2166,8 +2168,10 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
21662168
if (descr->serv_action_valid &&
21672169
descr->service_action == requested_sa) {
21682170
if (!descr->enabled || descr->enabled(descr,
2169-
cmd))
2171+
cmd)) {
21702172
*opcode = descr;
2173+
return TCM_NO_SENSE;
2174+
}
21712175
} else if (!descr->serv_action_valid)
21722176
return TCM_INVALID_CDB_FIELD;
21732177
break;
@@ -2180,13 +2184,15 @@ spc_rsoc_get_descr(struct se_cmd *cmd, struct target_opcode_descriptor **opcode)
21802184
*/
21812185
if (descr->service_action == requested_sa)
21822186
if (!descr->enabled || descr->enabled(descr,
2183-
cmd))
2187+
cmd)) {
21842188
*opcode = descr;
2189+
return TCM_NO_SENSE;
2190+
}
21852191
break;
21862192
}
21872193
}
21882194

2189-
return 0;
2195+
return TCM_NO_SENSE;
21902196
}
21912197

21922198
static sense_reason_t

0 commit comments

Comments
 (0)