s390/ism: add release function for struct device
Subsystems (4)
Alexandra Winter
maintainerPATCH 1/1 s390/ism: add release function for struct device
From: Julian Ruess <[email protected]>
According to device_release() in /drivers/base/core.c, a device without a release function is a broken device and must be fixed.
The current code directly frees the device after calling device_add() without waiting for other kernel parts to release their references. Thus, a reference could still be held to a struct device, e.g., by sysfs, leading to potential use-after-free
issues if a proper release function is not set.
--- drivers/s390/net/ism_drv.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
drivers/s390/net/ism_drv.c +12 -2
@@ -588,6 +588,15 @@ static int ism_dev_init(struct ism_dev *ism)return ret; } +static void ism_dev_release (struct device *dev) +{ +struct ism_dev *ism; + + ism = container_of(dev, struct ism_dev, dev); + +kfree (ism); +} +static int ism_probe (struct pci_dev *pdev,const struct pci_device_id *id) {struct ism_dev *ism;
@@ -601,6 +610,7 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id)dev_set_drvdata (&pdev->dev, ism); ism->pdev = pdev; ism->dev.parent = &pdev->dev; + ism->dev.release = ism_dev_release;device_initialize (&ism->dev);dev_set_name (&ism->dev,dev_name (&pdev->dev)); ret =device_add (&ism->dev);
@@ -637,7 +647,7 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id)device_del (&ism->dev); err_dev:dev_set_drvdata (&pdev->dev,NULL ); -kfree (ism); +put_device (&ism->dev);return ret; }
@@ -682,7 +692,7 @@ static void ism_remove(struct pci_dev *pdev)pci_disable_device (pdev);device_del (&ism->dev);dev_set_drvdata (&pdev->dev,NULL ); -kfree (ism); +put_device (&ism->dev); }static struct pci_driver ism_driver = {
Signature · 1 line
2.45.2
Quoted 12 lines · Alexandra Winter
From: Julian Ruess <[email protected]>
According to
device_release()in /drivers/base/core.c, a device without a release function is a broken device and must be fixed.The current code directly frees the device after calling
device_add()without waiting for other kernel parts to release their references. Thus, a reference could still be held to a struct device, e.g., by sysfs, leading to potential use-after-free
issues if a proper release function is not set.
Quoted 5 lines
Fixes 8c81ba20349d ("net/smc: De-tangle ism and smc device initialization")Reviewed-by Alexandra Winter <[email protected]>Reviewed-by Wenjia Zhang <[email protected]>Signed-off-by Julian Ruess <[email protected]>Signed-off-by Alexandra Winter <[email protected]>
This patch was applied to netdev/net.git (main) by Jakub Kicinski <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:
Quoted 6 lines · On Fri, 14 Feb 2025 13:01:37 +0100 you wrote:
From: Julian Ruess <[email protected]>
According to
device_release()in /drivers/base/core.c, a device without a release function is a broken device and must be fixed.
Quoted 7 lines
The current code directly frees the device after calling
device_add()without waiting for other kernel parts to release their references. Thus, a reference could still be held to a struct device, e.g., by sysfs, leading to potential use-after-free
issues if a proper release function is not set.[...]
Here is the summary with links:
- [net] s390/ism: add release function for struct device
https://git.kernel.org/netdev/net/c/915e34d5ad35
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html