| From: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Date: Thu, 11 May 2017 13:58:06 +0200 |
| Subject: xen-netfront: avoid crashing on resume after a failure in |
| talk_to_netback() |
| |
| commit d86b5672b1adb98b4cdd6fbf0224bbfb03db6e2e upstream. |
| |
| Unavoidable crashes in netfront_resume() and netback_changed() after a |
| previous fail in talk_to_netback() (e.g. when we fail to read MAC from |
| xenstore) were discovered. The failure path in talk_to_netback() does |
| unregister/free for netdev but we don't reset drvdata and we try accessing |
| it after resume. |
| |
| Fix the bug by removing the whole xen device completely with |
| device_unregister(), this guarantees we won't have any calls into netfront |
| after a failure. |
| |
| Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/xen-netfront.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/drivers/net/xen-netfront.c |
| +++ b/drivers/net/xen-netfront.c |
| @@ -1980,8 +1980,7 @@ abort_transaction_no_dev_fatal: |
| xennet_disconnect_backend(info); |
| xennet_destroy_queues(info); |
| out: |
| - unregister_netdev(info->netdev); |
| - xennet_free_netdev(info->netdev); |
| + device_unregister(&dev->dev); |
| return err; |
| } |
| |