--- /dev/null
+From cebbert@redhat.com Tue Aug 7 08:34:37 2007
+From: Chuck Ebbert <cebbert@redhat.com>
+Date: Tue, 07 Aug 2007 11:27:41 -0400
+Subject: ACPI: dock: fix opps after dock driver fails to initialize
+To: linux-stable <stable@kernel.org>
+Cc: "Brown, Len" <len.brown@intel.com>
+Message-ID: <46B88F6D.8070903@redhat.com>
+
+
+From: Chuck Ebbert <cebbert@redhat.com>
+
+ACPI: dock: fix opps after dock driver fails to initialize
+
+The driver tests the dock_station pointer for nonnull
+to check whether it has initialized properly. But in
+some cases dock_station will be non-null after being
+freed when driver init fails. Fix by zeroing the
+pointer after freeing.
+
+Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/dock.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/acpi/dock.c
++++ b/drivers/acpi/dock.c
+@@ -716,6 +716,7 @@ static int dock_add(acpi_handle handle)
+ if (ret) {
+ printk(KERN_ERR PREFIX "Error %d registering dock device\n", ret);
+ kfree(dock_station);
++ dock_station = NULL;
+ return ret;
+ }
+ ret = device_create_file(&dock_device.dev, &dev_attr_docked);
+@@ -723,6 +724,7 @@ static int dock_add(acpi_handle handle)
+ printk("Error %d adding sysfs file\n", ret);
+ platform_device_unregister(&dock_device);
+ kfree(dock_station);
++ dock_station = NULL;
+ return ret;
+ }
+ ret = device_create_file(&dock_device.dev, &dev_attr_undock);
+@@ -731,6 +733,7 @@ static int dock_add(acpi_handle handle)
+ device_remove_file(&dock_device.dev, &dev_attr_docked);
+ platform_device_unregister(&dock_device);
+ kfree(dock_station);
++ dock_station = NULL;
+ return ret;
+ }
+ ret = device_create_file(&dock_device.dev, &dev_attr_uid);
+@@ -738,6 +741,7 @@ static int dock_add(acpi_handle handle)
+ printk("Error %d adding sysfs file\n", ret);
+ platform_device_unregister(&dock_device);
+ kfree(dock_station);
++ dock_station = NULL;
+ return ret;
+ }
+
+@@ -750,6 +754,7 @@ static int dock_add(acpi_handle handle)
+ dd = alloc_dock_dependent_device(handle);
+ if (!dd) {
+ kfree(dock_station);
++ dock_station = NULL;
+ ret = -ENOMEM;
+ goto dock_add_err_unregister;
+ }
+@@ -777,6 +782,7 @@ dock_add_err_unregister:
+ device_remove_file(&dock_device.dev, &dev_attr_undock);
+ platform_device_unregister(&dock_device);
+ kfree(dock_station);
++ dock_station = NULL;
+ return ret;
+ }
+
+@@ -810,6 +816,7 @@ static int dock_remove(void)
+
+ /* free dock station memory */
+ kfree(dock_station);
++ dock_station = NULL;
+ return 0;
+ }
+