]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 06:45:09 +0000 (08:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 06:45:09 +0000 (08:45 +0200)
added patches:
xen-netfront-fix-hang-on-device-removal.patch

queue-3.18/series
queue-3.18/xen-netfront-fix-hang-on-device-removal.patch [new file with mode: 0644]

index 59aa888ffd21e50aa5591680e8e91d2bfe54d35e..9207a60082bee8b056f3f7c4b533f6f82ad99224 100644 (file)
@@ -11,3 +11,4 @@ fs-reiserfs-journal.c-add-missing-resierfs_warning-arg.patch
 resource-fix-integer-overflow-at-reallocation.patch
 usb-musb-gadget-misplaced-out-of-bounds-check.patch
 arm-dts-at91-at91sam9g25-fix-mux-mask-pinctrl-property.patch
+xen-netfront-fix-hang-on-device-removal.patch
diff --git a/queue-3.18/xen-netfront-fix-hang-on-device-removal.patch b/queue-3.18/xen-netfront-fix-hang-on-device-removal.patch
new file mode 100644 (file)
index 0000000..56527cf
--- /dev/null
@@ -0,0 +1,54 @@
+From c2d2e6738a209f0f9dffa2dc8e7292fc45360d61 Mon Sep 17 00:00:00 2001
+From: Jason Andryuk <jandryuk@gmail.com>
+Date: Wed, 28 Feb 2018 07:23:23 -0500
+Subject: xen-netfront: Fix hang on device removal
+
+From: Jason Andryuk <jandryuk@gmail.com>
+
+commit c2d2e6738a209f0f9dffa2dc8e7292fc45360d61 upstream.
+
+A toolstack may delete the vif frontend and backend xenstore entries
+while xen-netfront is in the removal code path.  In that case, the
+checks for xenbus_read_driver_state would return XenbusStateUnknown, and
+xennet_remove would hang indefinitely.  This hang prevents system
+shutdown.
+
+xennet_remove must be able to handle XenbusStateUnknown, and
+netback_changed must also wake up the wake_queue for that state as well.
+
+Fixes: 5b5971df3bc2 ("xen-netfront: remove warning when unloading module")
+
+Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
+Cc: Eduardo Otubo <otubo@redhat.com>
+Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/xen-netfront.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/xen-netfront.c
++++ b/drivers/net/xen-netfront.c
+@@ -2067,7 +2067,10 @@ static void netback_changed(struct xenbu
+       case XenbusStateInitialised:
+       case XenbusStateReconfiguring:
+       case XenbusStateReconfigured:
++              break;
++
+       case XenbusStateUnknown:
++              wake_up_all(&module_unload_q);
+               break;
+       case XenbusStateInitWait:
+@@ -2314,7 +2317,9 @@ static int xennet_remove(struct xenbus_d
+               xenbus_switch_state(dev, XenbusStateClosing);
+               wait_event(module_unload_q,
+                          xenbus_read_driver_state(dev->otherend) ==
+-                         XenbusStateClosing);
++                         XenbusStateClosing ||
++                         xenbus_read_driver_state(dev->otherend) ==
++                         XenbusStateUnknown);
+               xenbus_switch_state(dev, XenbusStateClosed);
+               wait_event(module_unload_q,