From: Justin Tee <justintee8345@gmail.com>
To: linux-scsi@vger.kernel.org
Cc: jsmart833426@gmail.com, justin.tee@broadcom.com,
Justin Tee <justintee8345@gmail.com>
Subject: [PATCH v2 04/14] lpfc: Check fc4_xpt_flags before decrementing ndlp kref on FDISC error
Date: Fri, 5 Jun 2026 11:23:26 -0700 [thread overview]
Message-ID: <20260605182336.134919-5-justintee8345@gmail.com> (raw)
In-Reply-To: <20260605182336.134919-1-justintee8345@gmail.com>
The current initial kref count drop logic for an ndlp that fails FDISC
assumes that the ndlp has never registered with transport layer and thus
the lpfc_dev_loss_tmo_callbk never called. However, a failed FDISC can
occur after a successful transport layer registration too. So,
lpfc_dev_loss_tmo_callbk can occur and there is a potential use-after-free
on the ndlp.
Check ndlp->fc4_xpt_flags if previously registered with an upper layer
transport and check ndlp->nlp_flags if there is a LPFC_EVT_DEV_LOSS work
pending. If not previously registered nor LPFC_EVT_DEV_LOSS work pending,
then set the NLP_DROPPED flag as before and decrement the initial kref on
FDISC error. However, if ndlp has been previously registered, then let the
pre-existing logic for each transport's respective dev_loss_tmo_callbk
perform the initial kref decrement.
Signed-off-by: Justin Tee <justintee8345@gmail.com>
---
drivers/scsi/lpfc/lpfc_els.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 4e3fe89283e4..896d69a0a655 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -11416,7 +11416,6 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
ulp_status, ulp_word4, vport->fc_prevDID);
if (ulp_status) {
-
if (lpfc_fabric_login_reqd(phba, cmdiocb, rspiocb)) {
lpfc_retry_pport_discovery(phba);
goto out;
@@ -11427,11 +11426,22 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
goto out;
/* Warn FDISC status */
lpfc_vlog_msg(vport, KERN_WARNING, LOG_ELS,
- "0126 FDISC cmpl status: x%x/x%x)\n",
- ulp_status, ulp_word4);
+ "0126 FDISC cmpl status: (x%x/x%x) ndlp x%px "
+ "Data: x%lx x%x x%x x%x x%x x%x x%x x%x x%x\n",
+ ulp_status, ulp_word4, ndlp, ndlp->nlp_flag,
+ ndlp->nlp_DID, ndlp->nlp_last_elscmd,
+ ndlp->nlp_type, ndlp->nlp_rpi, ndlp->nlp_state,
+ ndlp->nlp_prev_state, ndlp->fc4_xpt_flags,
+ kref_read(&ndlp->kref));
- /* drop initial reference */
- if (!test_and_set_bit(NLP_DROPPED, &ndlp->nlp_flag))
+ /* If have not previously registered with transport layer and no
+ * LPFC_EVT_DEV_LOSS work pending, then drop initial reference.
+ * Otherwise, let the dev_loss_tmo_callbk drop the initial
+ * reference.
+ */
+ if (!(ndlp->fc4_xpt_flags & (SCSI_XPT_REGD | NVME_XPT_REGD)) &&
+ !test_bit(NLP_IN_DEV_LOSS, &ndlp->nlp_flag) &&
+ !test_and_set_bit(NLP_DROPPED, &ndlp->nlp_flag))
lpfc_nlp_put(ndlp);
goto fdisc_failed;
--
2.38.0
next prev parent reply other threads:[~2026-06-05 17:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-05 18:23 [PATCH v2 00/14] Update lpfc to revision 15.0.0.1 Justin Tee
2026-06-05 18:23 ` [PATCH v2 01/14] lpfc: Fix use-after-free in lpfc_cmpl_ct_cmd_vmid Justin Tee
2026-06-05 18:23 ` [PATCH v2 02/14] lpfc: Early return out of lpfc_els_abort when HBA_SETUP flag is not set Justin Tee
2026-06-08 15:14 ` Ewan Milne
2026-06-05 18:23 ` [PATCH v2 03/14] lpfc: Fix kernel oops when unmapping scsi dma buffers for an aborted cmd Justin Tee
2026-06-05 18:23 ` Justin Tee [this message]
2026-06-05 18:23 ` [PATCH v2 05/14] lpfc: Add handling for when PLOGI or PRLI is dropped during link failure Justin Tee
2026-06-05 18:23 ` [PATCH v2 06/14] lpfc: Fix ndlp use-after-free during repeated RSCN and rediscovery sequence Justin Tee
2026-06-05 18:23 ` [PATCH v2 07/14] lpfc: Rework I/O flush ordering when unloading driver Justin Tee
2026-06-05 18:23 ` [PATCH v2 08/14] lpfc: Improve PLOGI retry handling for large SAN configurations Justin Tee
2026-06-05 18:23 ` [PATCH v2 09/14] lpfc: Send inhibited ABORT_WQE when PLOGI CQE SEQUENCE_TMO is received Justin Tee
2026-06-05 18:23 ` [PATCH v2 10/14] lpfc: Remove slowpath cqe process limiter in slow ring event handler Justin Tee
2026-06-05 18:23 ` [PATCH v2 11/14] lpfc: Put iocbq on phba->txq when ELS WQ is full or ELS SGL unavailable Justin Tee
2026-06-05 18:23 ` [PATCH v2 12/14] lpfc: Update ELS ACC logging for diagnostic troubleshooting Justin Tee
2026-06-05 18:23 ` [PATCH v2 13/14] lpfc: Refactor calls on fc_disctmo to lpfc_set_disctmo in RSCN handler Justin Tee
2026-06-05 18:23 ` [PATCH v2 14/14] lpfc: Update lpfc version to 15.0.0.1 Justin Tee
2026-07-12 1:24 ` [PATCH v2 00/14] Update lpfc to revision 15.0.0.1 Ewan Milne
2026-07-12 18:05 ` Martin K. Petersen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260605182336.134919-5-justintee8345@gmail.com \
--to=justintee8345@gmail.com \
--cc=jsmart833426@gmail.com \
--cc=justin.tee@broadcom.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.