scsi: lpfc: Fix prli_fc4_req checks in PRLI handling
The if statment check (prli_fc4_req & PRLI_NVME_TYPE) evaluates to true when receiving a PRLI request for bogus FC4 type codes that happen to have the 3rd or 5th bit set because PRLI_NVME_TYPE is 0x28. This leads to sending a PRLI_NVME_ACC even for bogus FC4 type codes. Change the bitwise & check to an exact == type code check to ensure we send PRLI_NVME_ACC only for NVME type coded PRLI requests. Link: https://lore.kernel.org/r/20220911221505.117655-2-jsmart2021@gmail.com Co-developed-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
5ba207e55e
commit
16ece56986
|
@ -6006,7 +6006,7 @@ lpfc_els_rsp_prli_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb,
|
|||
if (prli_fc4_req == PRLI_FCP_TYPE) {
|
||||
cmdsize = sizeof(uint32_t) + sizeof(PRLI);
|
||||
elsrspcmd = (ELS_CMD_ACC | (ELS_CMD_PRLI & ~ELS_RSP_MASK));
|
||||
} else if (prli_fc4_req & PRLI_NVME_TYPE) {
|
||||
} else if (prli_fc4_req == PRLI_NVME_TYPE) {
|
||||
cmdsize = sizeof(uint32_t) + sizeof(struct lpfc_nvme_prli);
|
||||
elsrspcmd = (ELS_CMD_ACC | (ELS_CMD_NVMEPRLI & ~ELS_RSP_MASK));
|
||||
} else {
|
||||
|
@ -6069,7 +6069,7 @@ lpfc_els_rsp_prli_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb,
|
|||
npr->ConfmComplAllowed = 1;
|
||||
npr->prliType = PRLI_FCP_TYPE;
|
||||
npr->initiatorFunc = 1;
|
||||
} else if (prli_fc4_req & PRLI_NVME_TYPE) {
|
||||
} else if (prli_fc4_req == PRLI_NVME_TYPE) {
|
||||
/* Respond with an NVME PRLI Type */
|
||||
npr_nvme = (struct lpfc_nvme_prli *) pcmd;
|
||||
bf_set(prli_type_code, npr_nvme, PRLI_NVME_TYPE);
|
||||
|
|
Loading…
Reference in New Issue