From: Justin Tee justin.tee@broadcom.com
[ Upstream commit 05ae6c9c7315d844fbc15afe393f5ba5e5771126 ]
In lpfc_check_sli_ndlp(), the get_job_els_rsp64_did remote_id assignment does not apply for GEN_REQUEST64 commands as it only has meaning for a ELS_REQUEST64 command. So, if (iocb->ndlp == ndlp) is false, we could erroneously return the wrong value. Fix by replacing the fallthrough statement with a break statement before the remote_id check.
Signed-off-by: Justin Tee justin.tee@broadcom.com Link: https://lore.kernel.org/r/20250425194806.3585-2-justintee8345@gmail.com Signed-off-by: Martin K. Petersen martin.petersen@oracle.com Signed-off-by: Sasha Levin sashal@kernel.org ---
**YES** This commit should be backported to stable kernel trees. Here's my detailed analysis: **Reasons for Backporting:** 1. **Fixes a Clear Bug**: The commit addresses a specific logic error where `CMD_GEN_REQUEST64_CR` commands incorrectly fall through to use `get_job_els_rsp64_did()`, which is designed for ELS requests and may return meaningless data for generic requests. 2. **Small and Contained Change**: The fix is minimal (changing `fallthrough;` to `break;`) and affects only the `lpfc_check_sli_ndlp()` function in `drivers/scsi/lpfc/lpfc_hbadisc.c:5056`. 3. **Low Regression Risk**: The change makes the code logic more precise by ensuring each command type uses its appropriate validation method. This reduces the chance of false matches rather than introducing new behavior. 4. **Affects Critical Functionality**: The `lpfc_check_sli_ndlp()` function is used to match IOCBs to node lists, which is fundamental for proper SCSI I/O handling and could affect data integrity if nodes are incorrectly matched. 5. **Similar to Accepted Backports**: This fix follows the same pattern as Similar Commit #2 (Status: YES), which fixed missing validation in lpfc node handling code. **Evidence from Code Analysis:** - `get_job_els_rsp64_did()` extracts destination ID from ELS request structures (`iocbq->wqe.els_req.wqe_dest` or `iocbq->iocb.un.elsreq64.remoteID`) - For `CMD_GEN_REQUEST64_CR` commands, these ELS-specific fields may contain unrelated data - The incorrect fallthrough could cause `lpfc_check_sli_ndlp()` to return 1 (match) when it should return 0 (no match), potentially leading to I/O being associated with wrong nodes **Stability Criteria Met:** - ✅ Important bug fix affecting I/O path - ✅ No new features introduced - ✅ No architectural changes - ✅ Minimal regression risk - ✅ Confined to lpfc driver subsystem This is exactly the type of targeted bug fix that stable trees are designed to include.
drivers/scsi/lpfc/lpfc_hbadisc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 07cd611f34bd5..1790cf6b30a15 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c @@ -5053,7 +5053,7 @@ lpfc_check_sli_ndlp(struct lpfc_hba *phba, case CMD_GEN_REQUEST64_CR: if (iocb->ndlp == ndlp) return 1; - fallthrough; + break; case CMD_ELS_REQUEST64_CR: if (remote_id == ndlp->nlp_DID) return 1;