From a22fcf63f4fe979546c646661ec0d39b005b5100 Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Wed, 28 May 2003 17:41:22 +0100 Subject: [PATCH] Fix crash when unloading yenta_socket in Linux 2.5.69 socket->base is unmapped in yenta_close(), which is called by cardbus_remove(). The value of socket->base is not changed to NULL, so it becomes invalid. Then cardbus_remove() calls class_device_unregister(), which calls pcmcia_unregister_socket(), which it turn tries to access memory space of the socket. --- drivers/pcmcia/pci_socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pcmcia/pci_socket.c b/drivers/pcmcia/pci_socket.c index c48b05ba8828..493e8fd0756e 100644 --- a/drivers/pcmcia/pci_socket.c +++ b/drivers/pcmcia/pci_socket.c @@ -196,9 +196,9 @@ static void __devexit cardbus_remove (struct pci_dev *dev) pci_socket_t *socket = pci_get_drvdata(dev); /* note: we are already unregistered from the cs core */ + class_device_unregister(&socket->cls_d.class_dev); if (socket->op && socket->op->close) socket->op->close(socket); - class_device_unregister(&socket->cls_d.class_dev); pci_set_drvdata(dev, NULL); } -- cgit v1.2.3