Skip to content

Commit aebfdfe

Browse files
Yang YingliangMani-Sadhasivam
authored andcommitted
NTB: fix possible name leak in ntb_register_device()
If device_register() fails in ntb_register_device(), the device name allocated by dev_set_name() should be freed. As per the comment in device_register(), callers should use put_device() to give up the reference in the error path. So fix this by calling put_device() in the error path so that the name can be freed in kobject_cleanup(). As a result of this, put_device() in the error path of ntb_register_device() is removed and the actual error is returned. Fixes: a1bd3ba ("NTB: Add NTB hardware abstraction layer") Signed-off-by: Yang Yingliang <[email protected]> Reviewed-by: Ilpo Järvinen <[email protected]> Reviewed-by: Manivannan Sadhasivam <[email protected]> Reviewed-by: Dave Jiang <[email protected]> Link: https://lore.kernel.org/r/[email protected] [mani: reworded commit message] Signed-off-by: Manivannan Sadhasivam <[email protected]>
1 parent c795fd3 commit aebfdfe

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

drivers/ntb/core.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ EXPORT_SYMBOL(ntb_unregister_client);
100100

101101
int ntb_register_device(struct ntb_dev *ntb)
102102
{
103+
int ret;
104+
103105
if (!ntb)
104106
return -EINVAL;
105107
if (!ntb->pdev)
@@ -120,7 +122,11 @@ int ntb_register_device(struct ntb_dev *ntb)
120122
ntb->ctx_ops = NULL;
121123
spin_lock_init(&ntb->ctx_lock);
122124

123-
return device_register(&ntb->dev);
125+
ret = device_register(&ntb->dev);
126+
if (ret)
127+
put_device(&ntb->dev);
128+
129+
return ret;
124130
}
125131
EXPORT_SYMBOL(ntb_register_device);
126132

drivers/pci/endpoint/functions/pci-epf-vntb.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,15 +1264,11 @@ static int pci_vntb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
12641264
ret = ntb_register_device(&ndev->ntb);
12651265
if (ret) {
12661266
dev_err(dev, "Failed to register NTB device\n");
1267-
goto err_register_dev;
1267+
return ret;
12681268
}
12691269

12701270
dev_dbg(dev, "PCI Virtual NTB driver loaded\n");
12711271
return 0;
1272-
1273-
err_register_dev:
1274-
put_device(&ndev->ntb.dev);
1275-
return -EINVAL;
12761272
}
12771273

12781274
static struct pci_device_id pci_vntb_table[] = {

0 commit comments

Comments
 (0)