]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.7.3/usb-serial-fix-memleak-in-driver-registration-error-path.patch
5.1-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.7.3 / usb-serial-fix-memleak-in-driver-registration-error-path.patch
1 From 647024a7df36014bbc4479d92d88e6b77c0afcf6 Mon Sep 17 00:00:00 2001
2 From: Alexey Klimov <klimov.linux@gmail.com>
3 Date: Mon, 8 Aug 2016 02:34:46 +0100
4 Subject: USB: serial: fix memleak in driver-registration error path
5
6 From: Alexey Klimov <klimov.linux@gmail.com>
7
8 commit 647024a7df36014bbc4479d92d88e6b77c0afcf6 upstream.
9
10 udriver struct allocated by kzalloc() will not be freed
11 if usb_register() and next calls fail. This patch fixes this
12 by adding one more step with kfree(udriver) in error path.
13
14 Signed-off-by: Alexey Klimov <klimov.linux@gmail.com>
15 Acked-by: Alan Stern <stern@rowland.harvard.edu>
16 Signed-off-by: Johan Hovold <johan@kernel.org>
17 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
18
19 ---
20 drivers/usb/serial/usb-serial.c | 4 +++-
21 1 file changed, 3 insertions(+), 1 deletion(-)
22
23 --- a/drivers/usb/serial/usb-serial.c
24 +++ b/drivers/usb/serial/usb-serial.c
25 @@ -1433,7 +1433,7 @@ int usb_serial_register_drivers(struct u
26
27 rc = usb_register(udriver);
28 if (rc)
29 - return rc;
30 + goto failed_usb_register;
31
32 for (sd = serial_drivers; *sd; ++sd) {
33 (*sd)->usb_driver = udriver;
34 @@ -1451,6 +1451,8 @@ int usb_serial_register_drivers(struct u
35 while (sd-- > serial_drivers)
36 usb_serial_deregister(*sd);
37 usb_deregister(udriver);
38 +failed_usb_register:
39 + kfree(udriver);
40 return rc;
41 }
42 EXPORT_SYMBOL_GPL(usb_serial_register_drivers);