Skip to content

Commit

Permalink
scsi: lpfc: Early return after marking final NLP_DROPPED flag in dev_…
Browse files Browse the repository at this point in the history
…loss_tmo

When a dev_loss_tmo event occurs, an ndlp lock is taken before checking
nlp_flag for NLP_DROPPED.  There is an attempt to restore the ndlp lock
when exiting the if statement, but the nlp_put kref could be the final
decrement causing a use-after-free memory access on a released ndlp object.

Instead of trying to reacquire the ndlp lock after checking nlp_flag, just
return after calling nlp_put.

Signed-off-by: Justin Tee <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Reviewed-by: "Ewan D. Milne" <[email protected]>
Signed-off-by: Martin K. Petersen <[email protected]>
  • Loading branch information
Justin Tee authored and martinkpetersen committed Sep 14, 2023
1 parent 7dcc683 commit 9c30349
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/scsi/lpfc/lpfc_hbadisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ lpfc_dev_loss_tmo_callbk(struct fc_rport *rport)
ndlp->nlp_flag |= NLP_DROPPED;
spin_unlock_irqrestore(&ndlp->lock, iflags);
lpfc_nlp_put(ndlp);
spin_lock_irqsave(&ndlp->lock, iflags);
return;
}

spin_unlock_irqrestore(&ndlp->lock, iflags);
Expand Down

0 comments on commit 9c30349

Please sign in to comment.