Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8472ba62 authored by Wenwen Wang's avatar Wenwen Wang Committed by Jeff Kirsher
Browse files

e1000: fix memory leaks



In e1000_set_ringparam(), 'tx_old' and 'rx_old' are not deallocated if
e1000_up() fails, leading to memory leaks. Refactor the code to fix this
issue.

Signed-off-by: default avatarWenwen Wang <wenwen@cs.uga.edu>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 2c19e395
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -607,6 +607,7 @@ static int e1000_set_ringparam(struct net_device *netdev,
	for (i = 0; i < adapter->num_rx_queues; i++)
		rxdr[i].count = rxdr->count;

	err = 0;
	if (netif_running(adapter->netdev)) {
		/* Try to get new resources before deleting old */
		err = e1000_setup_all_rx_resources(adapter);
@@ -627,14 +628,13 @@ static int e1000_set_ringparam(struct net_device *netdev,
		adapter->rx_ring = rxdr;
		adapter->tx_ring = txdr;
		err = e1000_up(adapter);
		if (err)
			goto err_setup;
	}
	kfree(tx_old);
	kfree(rx_old);

	clear_bit(__E1000_RESETTING, &adapter->flags);
	return 0;
	return err;

err_setup_tx:
	e1000_free_all_rx_resources(adapter);
err_setup_rx:
@@ -646,7 +646,6 @@ static int e1000_set_ringparam(struct net_device *netdev,
err_alloc_tx:
	if (netif_running(adapter->netdev))
		e1000_up(adapter);
err_setup:
	clear_bit(__E1000_RESETTING, &adapter->flags);
	return err;
}