diff options
author | John W. Linville <linville@tuxdriver.com> | 2005-11-08 15:59:30 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2005-11-18 13:52:39 -0500 |
commit | 6b27adb607282addcfe2707783dfcc28ba3a753b (patch) | |
tree | 23cbb0796320ac9f77f3c5613d9dd6bcb4bf690a /drivers/net | |
parent | e98fc4aae10b925ad5aa739c483abf78d80b66db (diff) |
[PATCH] e1000: zero-out pointers in e1000_free_desc_rings
In e1000_free_desc_rings, zero-out pointers after the memory they
point to is freed. The test rings are static and get re-used, and
failures during subsequent test setups can cause e1000_free_desc_rings
to get called with dirty pointers. Dirty pointers can cause oopses
or crashes...
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/e1000/e1000_ethtool.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c index 8584e9382c2c..8646914964e7 100644 --- a/drivers/net/e1000/e1000_ethtool.c +++ b/drivers/net/e1000/e1000_ethtool.c | |||
@@ -960,13 +960,21 @@ e1000_free_desc_rings(struct e1000_adapter *adapter) | |||
960 | } | 960 | } |
961 | } | 961 | } |
962 | 962 | ||
963 | if(txdr->desc) | 963 | if(txdr->desc) { |
964 | pci_free_consistent(pdev, txdr->size, txdr->desc, txdr->dma); | 964 | pci_free_consistent(pdev, txdr->size, txdr->desc, txdr->dma); |
965 | if(rxdr->desc) | 965 | txdr->desc = NULL; |
966 | } | ||
967 | if(rxdr->desc) { | ||
966 | pci_free_consistent(pdev, rxdr->size, rxdr->desc, rxdr->dma); | 968 | pci_free_consistent(pdev, rxdr->size, rxdr->desc, rxdr->dma); |
969 | rxdr->desc = NULL; | ||
970 | } | ||
967 | 971 | ||
968 | kfree(txdr->buffer_info); | 972 | kfree(txdr->buffer_info); |
973 | txdr->buffer_info = NULL; | ||
974 | |||
969 | kfree(rxdr->buffer_info); | 975 | kfree(rxdr->buffer_info); |
976 | rxdr->buffer_info = NULL; | ||
977 | |||
970 | return; | 978 | return; |
971 | } | 979 | } |
972 | 980 | ||