| From: Chas Williams <3chas3@gmail.com> |
| Date: Wed, 19 Aug 2015 19:14:20 -0400 |
| Subject: net/xen-netfront: only clean up queues if present |
| |
| commit 9a873c71e91cabf4c10fd9bbd8358c22deaf6c9e upstream. |
| |
| If you simply load and unload the module without starting the interfaces, |
| the queues are never created and you get a bad pointer dereference. |
| |
| Signed-off-by: Chas Williams <3chas3@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/xen-netfront.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/xen-netfront.c |
| +++ b/drivers/net/xen-netfront.c |
| @@ -1422,7 +1422,7 @@ static void xennet_disconnect_backend(st |
| |
| netif_carrier_off(info->netdev); |
| |
| - for (i = 0; i < num_queues; ++i) { |
| + for (i = 0; i < num_queues && info->queues; ++i) { |
| struct netfront_queue *queue = &info->queues[i]; |
| |
| del_timer_sync(&queue->rx_refill_timer); |
| @@ -2294,7 +2294,8 @@ static int xennet_remove(struct xenbus_d |
| |
| unregister_netdev(info->netdev); |
| |
| - xennet_destroy_queues(info); |
| + if (info->queues) |
| + xennet_destroy_queues(info); |
| xennet_free_netdev(info->netdev); |
| |
| return 0; |