[PATCH] scsi: elx: Fix memory leak on scsi_add_host_with_dma failure
Chen Changcheng <[email protected]> Mon, 27 Jul 2026 17:17:36 +0800
| Newsgroups | org.kernel.vger.target-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-scsi |
|---|---|
| Message-ID | <[email protected]> |
If scsi_add_host_with_dma() fails in efct_scsi_new_device() or efct_scsi_new_vport(), the Scsi_Host allocated by scsi_host_alloc() is never released, causing a memory leak. The caller's error path has no knowledge of this internal allocation: - efct_scsi_new_device's caller (efct_xport_initialize) only frees the xport structure, not the Scsi_Host. - efct_scsi_new_vport's caller chain (efct_vport_create -> fc_vport_setup) only cleans up the fc_vport structure itself, not the vport's Scsi_Host allocated inside efct_scsi_new_vport. Add the missing scsi_host_put() calls before each error return. Signed-off-by: Chen Changcheng <[email protected]> --- drivers/scsi/elx/efct/efct_xport.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/scsi/elx/efct/efct_xport.c b/drivers/scsi/elx/efct/efct_xport.c index 9dcaef6fc188..61ebbf091d71 100644 --- a/drivers/scsi/elx/efct/efct_xport.c +++ b/drivers/scsi/elx/efct/efct_xport.c @@ -416,6 +416,7 @@ efct_scsi_new_device(struct efct *efct) &efct->pci->dev); if (error) { efc_log_debug(efct, "failed scsi_add_host_with_dma\n"); + scsi_host_put(shost); return -EIO; } @@ -930,6 +931,7 @@ efct_scsi_new_vport(struct efct *efct, struct device *dev) error = scsi_add_host_with_dma(shost, dev, &efct->pci->dev); if (error) { efc_log_debug(efct, "failed scsi_add_host_with_dma\n"); + scsi_host_put(shost); return NULL; } -- 2.25.1