Commit 04ad06e4 authored by Chaohai Chen's avatar Chaohai Chen Committed by Martin K. Petersen
Browse files

scsi: target: spc: Fix loop traversal in spc_rsoc_get_descr()



Stop traversing after finding the appropriate descriptor.

Signed-off-by: default avatarChaohai Chen <wdhh66@163.com>
Link: https://lore.kernel.org/r/20250124085542.109088-1-wdhh66@163.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent b5053231
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -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