Xiyu Yang 15e816ae1f scsi: lpfc: Fix lpfc_nodelist leak when processing unsolicited event
[ Upstream commit 7217e6e694da3aae6d17db8a7f7460c8d4817ebf ]

In order to create or activate a new node, lpfc_els_unsol_buffer() invokes
lpfc_nlp_init() or lpfc_enable_node() or lpfc_nlp_get(), all of them will
return a reference of the specified lpfc_nodelist object to "ndlp" with
increased refcnt.

When lpfc_els_unsol_buffer() returns, local variable "ndlp" becomes
invalid, so the refcount should be decreased to keep refcount balanced.

The reference counting issue happens in one exception handling path of
lpfc_els_unsol_buffer(). When "ndlp" in DEV_LOSS, the function forgets to
decrease the refcnt increased by lpfc_nlp_init() or lpfc_enable_node() or
lpfc_nlp_get(), causing a refcnt leak.

Fix this issue by calling lpfc_nlp_put() when "ndlp" in DEV_LOSS.

Link: https://lore.kernel.org/r/1590416184-52592-1-git-send-email-xiyuyang19@fudan.edu.cn
Reviewed-by: Daniel Wagner <dwagner@suse.de>
Reviewed-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-06-30 15:38:22 -04:00
..
2016-07-20 17:38:35 -06:00
2015-04-27 10:10:19 -07:00
2015-04-27 10:04:39 -07:00
2015-04-27 10:05:55 -07:00
2015-04-17 10:13:56 -07:00
2015-11-25 22:08:55 -05:00
2016-02-23 21:27:02 -05:00
2016-05-10 22:01:07 -04:00
2015-11-09 16:32:14 -08:00
2016-10-07 09:28:53 -07:00
2017-12-20 10:07:22 +01:00
2016-02-25 21:10:53 -05:00
2019-11-28 18:28:23 +01:00
2016-01-27 20:36:10 +08:00
2016-01-27 20:36:10 +08:00
2016-09-26 20:49:25 -04:00
2014-11-24 20:01:28 +01:00
2016-02-23 21:27:02 -05:00
2016-11-28 15:51:31 -05:00
2016-10-07 09:28:53 -07:00
2016-02-23 21:27:02 -05:00
2014-11-12 11:15:57 +01:00
2015-11-18 11:59:09 -05:00
2016-02-23 21:27:02 -05:00
2014-11-20 09:11:15 +01:00