]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Feb 2018 09:48:43 +0000 (10:48 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Feb 2018 09:48:43 +0000 (10:48 +0100)
added patches:
usbip-keep-usbip_device-sockfd-state-in-sync-with-tcp_socket.patch

queue-3.18/series
queue-3.18/usbip-keep-usbip_device-sockfd-state-in-sync-with-tcp_socket.patch [new file with mode: 0644]

index 43658a8efda21cf7d7e3a7c4132a916f77f56ee0..57ac9c260aff75f245001cc51605625c76c565e2 100644 (file)
@@ -31,3 +31,4 @@ selinux-ensure-the-context-is-nul-terminated-in-security_context_to_sid_core.pat
 asoc-ux500-add-module_license-tag.patch
 video-fbdev-mmp-add-module_license.patch
 dn_getsockoptdecnet-move-nf_-get-set-sockopt-outside-sock-lock.patch
+usbip-keep-usbip_device-sockfd-state-in-sync-with-tcp_socket.patch
diff --git a/queue-3.18/usbip-keep-usbip_device-sockfd-state-in-sync-with-tcp_socket.patch b/queue-3.18/usbip-keep-usbip_device-sockfd-state-in-sync-with-tcp_socket.patch
new file mode 100644 (file)
index 0000000..58f04b5
--- /dev/null
@@ -0,0 +1,65 @@
+From 009f41aed4b3e11e6dc1e3c07377a10c20f1a5ed Mon Sep 17 00:00:00 2001
+From: Shuah Khan <shuahkh@osg.samsung.com>
+Date: Fri, 26 Jan 2018 11:56:50 -0700
+Subject: usbip: keep usbip_device sockfd state in sync with tcp_socket
+
+From: Shuah Khan <shuahkh@osg.samsung.com>
+
+commit 009f41aed4b3e11e6dc1e3c07377a10c20f1a5ed upstream.
+
+Keep usbip_device sockfd state in sync with tcp_socket. When tcp_socket
+is reset to null, reset sockfd to -1 to keep it in sync.
+
+Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/usbip/stub_dev.c |    3 +++
+ drivers/usb/usbip/vhci_hcd.c |    2 ++
+ 2 files changed, 5 insertions(+)
+
+--- a/drivers/usb/usbip/stub_dev.c
++++ b/drivers/usb/usbip/stub_dev.c
+@@ -87,6 +87,7 @@ static ssize_t store_sockfd(struct devic
+                       goto err;
+               sdev->ud.tcp_socket = socket;
++              sdev->ud.sockfd = sockfd;
+               spin_unlock_irq(&sdev->ud.lock);
+@@ -186,6 +187,7 @@ static void stub_shutdown_connection(str
+       if (ud->tcp_socket) {
+               sockfd_put(ud->tcp_socket);
+               ud->tcp_socket = NULL;
++              ud->sockfd = -1;
+       }
+       /* 3. free used data */
+@@ -280,6 +282,7 @@ static struct stub_device *stub_device_a
+       sdev->ud.status         = SDEV_ST_AVAILABLE;
+       spin_lock_init(&sdev->ud.lock);
+       sdev->ud.tcp_socket     = NULL;
++      sdev->ud.sockfd         = -1;
+       INIT_LIST_HEAD(&sdev->priv_init);
+       INIT_LIST_HEAD(&sdev->priv_tx);
+--- a/drivers/usb/usbip/vhci_hcd.c
++++ b/drivers/usb/usbip/vhci_hcd.c
+@@ -791,6 +791,7 @@ static void vhci_shutdown_connection(str
+       if (vdev->ud.tcp_socket) {
+               sockfd_put(vdev->ud.tcp_socket);
+               vdev->ud.tcp_socket = NULL;
++              vdev->ud.sockfd = -1;
+       }
+       pr_info("release socket\n");
+@@ -839,6 +840,7 @@ static void vhci_device_reset(struct usb
+       if (ud->tcp_socket) {
+               sockfd_put(ud->tcp_socket);
+               ud->tcp_socket = NULL;
++              ud->sockfd = -1;
+       }
+       ud->status = VDEV_ST_NULL;