Takashi Iwai 0c72fc
From daf82bd24e308c5a83758047aff1bd81edda4f11 Mon Sep 17 00:00:00 2001
Takashi Iwai 0c72fc
From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl>
Takashi Iwai 0c72fc
Date: Sat, 10 Aug 2019 10:42:48 +0200
Takashi Iwai 0c72fc
Subject: [PATCH] usb: gadget: u_serial: add missing port entry locking
Takashi Iwai 0c72fc
Mime-version: 1.0
Takashi Iwai 0c72fc
Content-type: text/plain; charset=UTF-8
Takashi Iwai 0c72fc
Content-transfer-encoding: 8bit
Takashi Iwai 0c72fc
Git-commit: daf82bd24e308c5a83758047aff1bd81edda4f11
Takashi Iwai 0c72fc
Patch-mainline: v5.5-rc1
Takashi Iwai 0c72fc
References: bsc#1051510
Takashi Iwai 0c72fc
Takashi Iwai 0c72fc
gserial_alloc_line() misses locking (for a release barrier) while
Takashi Iwai 0c72fc
resetting port entry on TTY allocation failure. Fix this.
Takashi Iwai 0c72fc
Takashi Iwai 0c72fc
Cc: stable@vger.kernel.org
Takashi Iwai 0c72fc
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Takashi Iwai 0c72fc
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Takashi Iwai 0c72fc
Tested-by: Ladislav Michl <ladis@linux-mips.org>
Takashi Iwai 0c72fc
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Takashi Iwai 0c72fc
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 0c72fc
Takashi Iwai 0c72fc
---
Takashi Iwai 0c72fc
 drivers/usb/gadget/function/u_serial.c | 2 ++
Takashi Iwai 0c72fc
 1 file changed, 2 insertions(+)
Takashi Iwai 0c72fc
Takashi Iwai 0c72fc
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
Takashi Iwai 0c72fc
index 65f634ec7fc2..bb1e2e1d0076 100644
Takashi Iwai 0c72fc
--- a/drivers/usb/gadget/function/u_serial.c
Takashi Iwai 0c72fc
+++ b/drivers/usb/gadget/function/u_serial.c
Takashi Iwai 0c72fc
@@ -1239,8 +1239,10 @@ int gserial_alloc_line(unsigned char *line_num)
Takashi Iwai 0c72fc
 				__func__, port_num, PTR_ERR(tty_dev));
Takashi Iwai 0c72fc
 
Takashi Iwai 0c72fc
 		ret = PTR_ERR(tty_dev);
Takashi Iwai 0c72fc
+		mutex_lock(&ports[port_num].lock);
Takashi Iwai 0c72fc
 		port = ports[port_num].port;
Takashi Iwai 0c72fc
 		ports[port_num].port = NULL;
Takashi Iwai 0c72fc
+		mutex_unlock(&ports[port_num].lock);
Takashi Iwai 0c72fc
 		gserial_free_port(port);
Takashi Iwai 0c72fc
 		goto err;
Takashi Iwai 0c72fc
 	}
Takashi Iwai 0c72fc
-- 
Takashi Iwai 0c72fc
2.16.4
Takashi Iwai 0c72fc