Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d24834d authored by Martin K. Petersen's avatar Martin K. Petersen Committed by James Bottomley
Browse files

[SCSI] Fix range check in scsi_host_dif_capable()



The range checking from fe542396 was bad. We would still end up walking
beyond the array as Type 3 is defined to be 4 in the protection
bitmask. Instead use ARRAY_SIZE() for the range check.

Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 9d2696e6
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -873,7 +873,7 @@ static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsign
				       SHOST_DIF_TYPE2_PROTECTION,
				       SHOST_DIF_TYPE2_PROTECTION,
				       SHOST_DIF_TYPE3_PROTECTION };
				       SHOST_DIF_TYPE3_PROTECTION };


	if (target_type > SHOST_DIF_TYPE3_PROTECTION)
	if (target_type >= ARRAY_SIZE(cap))
		return 0;
		return 0;


	return shost->prot_capabilities & cap[target_type] ? target_type : 0;
	return shost->prot_capabilities & cap[target_type] ? target_type : 0;
@@ -887,7 +887,7 @@ static inline unsigned int scsi_host_dix_capable(struct Scsi_Host *shost, unsign
				       SHOST_DIX_TYPE2_PROTECTION,
				       SHOST_DIX_TYPE2_PROTECTION,
				       SHOST_DIX_TYPE3_PROTECTION };
				       SHOST_DIX_TYPE3_PROTECTION };


	if (target_type > SHOST_DIX_TYPE3_PROTECTION)
	if (target_type >= ARRAY_SIZE(cap))
		return 0;
		return 0;


	return shost->prot_capabilities & cap[target_type];
	return shost->prot_capabilities & cap[target_type];