diff options
author | John W. Linville <linville@tuxdriver.com> | 2005-11-08 15:45:02 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2005-11-18 13:52:39 -0500 |
commit | e98fc4aae10b925ad5aa739c483abf78d80b66db (patch) | |
tree | bb7ff2db2dcf8630e72a4b26b32319d59d0467d7 /drivers/net | |
parent | cd52d1ee9a92587b242d946a2300a3245d3b885a (diff) |
[PATCH] e1000: avoid leak when e1000_setup_loopback_test fails
In e1000_loopback_test, make sure to call e1000_free_desc_rings if
e1000_setup_loopback_test fails. Currently in that case it will not
get called, causing a leak.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/e1000/e1000_ethtool.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c index 8eae8ba27e84..8584e9382c2c 100644 --- a/drivers/net/e1000/e1000_ethtool.c +++ b/drivers/net/e1000/e1000_ethtool.c | |||
@@ -1440,9 +1440,11 @@ static int | |||
1440 | e1000_loopback_test(struct e1000_adapter *adapter, uint64_t *data) | 1440 | e1000_loopback_test(struct e1000_adapter *adapter, uint64_t *data) |
1441 | { | 1441 | { |
1442 | if((*data = e1000_setup_desc_rings(adapter))) goto err_loopback; | 1442 | if((*data = e1000_setup_desc_rings(adapter))) goto err_loopback; |
1443 | if((*data = e1000_setup_loopback_test(adapter))) goto err_loopback; | 1443 | if((*data = e1000_setup_loopback_test(adapter))) |
1444 | goto err_loopback_setup; | ||
1444 | *data = e1000_run_loopback_test(adapter); | 1445 | *data = e1000_run_loopback_test(adapter); |
1445 | e1000_loopback_cleanup(adapter); | 1446 | e1000_loopback_cleanup(adapter); |
1447 | err_loopback_setup: | ||
1446 | e1000_free_desc_rings(adapter); | 1448 | e1000_free_desc_rings(adapter); |
1447 | err_loopback: | 1449 | err_loopback: |
1448 | return *data; | 1450 | return *data; |