summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Righi <a.righi@cineca.it>2007-04-24 18:40:57 +0200
committerJeff Garzik <jeff@garzik.org>2007-04-24 18:40:57 +0200
commitd91c088b39e3c66d309938de858775bb90fd1ead (patch)
tree5ea1c77374e894b6218b764324fe1200290a4c40
parent8250: fix possible deadlock between serial8250_handle_port() and serial8250_i... (diff)
downloadlinux-d91c088b39e3c66d309938de858775bb90fd1ead.tar.xz
linux-d91c088b39e3c66d309938de858775bb90fd1ead.zip
[netdrvr] depca: handle platform_device_add() failure
The following patch fixes a kernel bug in depca_platform_probe(). We don't use a dynamic pointer for pldev->dev.platform_data, so it seems that the correct way to proceed if platform_device_add(pldev) fails is to explicitly set the pldev->dev.platform_data pointer to NULL, before calling the platform_device_put(pldev), or it will be kfree'ed by platform_device_release(). Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/depca.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/depca.c b/drivers/net/depca.c
index 5113eef755b9..f3807aaf10aa 100644
--- a/drivers/net/depca.c
+++ b/drivers/net/depca.c
@@ -1491,8 +1491,9 @@ static void __init depca_platform_probe (void)
depca_io_ports[i].device = pldev;
if (platform_device_add(pldev)) {
- platform_device_put(pldev);
depca_io_ports[i].device = NULL;
+ pldev->dev.platform_data = NULL;
+ platform_device_put(pldev);
continue;
}