* [PATCH net] s390/ism: add release function for struct device
@ 2025-02-14 12:01 Alexandra Winter
2025-02-17 13:51 ` Simon Horman
2025-02-18 1:20 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Alexandra Winter @ 2025-02-14 12:01 UTC (permalink / raw)
To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
Andrew Lunn, Julian Ruess
Cc: netdev, linux-s390, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
Thorsten Winkler, Simon Horman, Wenjia Zhang, Jan Karcher,
Gerd Bayer, Alexandra Winter, Halil Pasic, Stefan Raspl
From: Julian Ruess <julianr@linux.ibm.com>
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.
Fixes: 8c81ba20349d ("net/smc: De-tangle ism and smc device initialization")
Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
Signed-off-by: Julian Ruess <julianr@linux.ibm.com>
Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
---
drivers/s390/net/ism_drv.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c
index e36e3ea165d3..2f34761e6413 100644
--- a/drivers/s390/net/ism_drv.c
+++ b/drivers/s390/net/ism_drv.c
@@ -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 = {
--
2.45.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH net] s390/ism: add release function for struct device
2025-02-14 12:01 [PATCH net] s390/ism: add release function for struct device Alexandra Winter
@ 2025-02-17 13:51 ` Simon Horman
2025-02-18 1:20 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Simon Horman @ 2025-02-17 13:51 UTC (permalink / raw)
To: Alexandra Winter
Cc: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet,
Andrew Lunn, Julian Ruess, netdev, linux-s390, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, Thorsten Winkler, Wenjia Zhang, Jan Karcher,
Gerd Bayer, Halil Pasic, Stefan Raspl
On Fri, Feb 14, 2025 at 01:01:37PM +0100, Alexandra Winter wrote:
> From: Julian Ruess <julianr@linux.ibm.com>
>
> 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.
>
> Fixes: 8c81ba20349d ("net/smc: De-tangle ism and smc device initialization")
> Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
> Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
> Signed-off-by: Julian Ruess <julianr@linux.ibm.com>
> Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH net] s390/ism: add release function for struct device
2025-02-14 12:01 [PATCH net] s390/ism: add release function for struct device Alexandra Winter
2025-02-17 13:51 ` Simon Horman
@ 2025-02-18 1:20 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-02-18 1:20 UTC (permalink / raw)
To: Alexandra Winter
Cc: davem, kuba, pabeni, edumazet, andrew+netdev, julianr, netdev,
linux-s390, hca, gor, agordeev, borntraeger, svens, twinkler,
horms, wenjia, jaka, gbayer, pasic, raspl
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 14 Feb 2025 13:01:37 +0100 you wrote:
> From: Julian Ruess <julianr@linux.ibm.com>
>
> 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.
>
> [...]
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!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-02-18 1:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-14 12:01 [PATCH net] s390/ism: add release function for struct device Alexandra Winter
2025-02-17 13:51 ` Simon Horman
2025-02-18 1:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).