diff options
author | Bryan O'Sullivan <bos@pathscale.com> | 2006-05-23 14:32:33 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-05-23 16:27:06 -0400 |
commit | b0ff7c2005f7ec8dec10fb15e62b8e1acc172bbf (patch) | |
tree | d62bf6616d98ef73a941d7bbfbe1ebd5d1621d40 /drivers/infiniband/hw | |
parent | 94b8d9f98d7f535037eb9845b81396f667b4f727 (diff) |
IB/ipath: fix NULL dereference during cleanup
Fix NULL deref due to pcidev being clobbered before dd->ipath_f_cleanup()
was called.
Signed-off-by: Bryan O'Sullivan <bos@pathscale.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_driver.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index 3697edafd6d2..dddcdae736ac 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
@@ -1905,19 +1905,19 @@ static void __exit infinipath_cleanup(void) | |||
1905 | } else | 1905 | } else |
1906 | ipath_dbg("irq is 0, not doing free_irq " | 1906 | ipath_dbg("irq is 0, not doing free_irq " |
1907 | "for unit %u\n", dd->ipath_unit); | 1907 | "for unit %u\n", dd->ipath_unit); |
1908 | dd->pcidev = NULL; | ||
1909 | } | ||
1910 | 1908 | ||
1911 | /* | 1909 | /* |
1912 | * we check for NULL here, because it's outside the kregbase | 1910 | * we check for NULL here, because it's outside |
1913 | * check, and we need to call it after the free_irq. Thus | 1911 | * the kregbase check, and we need to call it |
1914 | * it's possible that the function pointers were never | 1912 | * after the free_irq. Thus it's possible that |
1915 | * initialized. | 1913 | * the function pointers were never initialized. |
1916 | */ | 1914 | */ |
1917 | if (dd->ipath_f_cleanup) | 1915 | if (dd->ipath_f_cleanup) |
1918 | /* clean up chip-specific stuff */ | 1916 | /* clean up chip-specific stuff */ |
1919 | dd->ipath_f_cleanup(dd); | 1917 | dd->ipath_f_cleanup(dd); |
1920 | 1918 | ||
1919 | dd->pcidev = NULL; | ||
1920 | } | ||
1921 | spin_lock_irqsave(&ipath_devs_lock, flags); | 1921 | spin_lock_irqsave(&ipath_devs_lock, flags); |
1922 | } | 1922 | } |
1923 | 1923 | ||