| From 5d8c61bc283826827e1f06816c146bfc507d3834 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <jhovold@gmail.com> |
| Date: Thu, 18 Oct 2012 11:43:28 +0200 |
| Subject: USB: io_ti: fix sysfs-attribute creation |
| |
| From: Johan Hovold <jhovold@gmail.com> |
| |
| commit 5d8c61bc283826827e1f06816c146bfc507d3834 upstream. |
| |
| Make sure port data is initialised before creating sysfs attributes to |
| avoid a race. |
| |
| A recent patch ("USB: io_ti: fix port-data memory leak") got the |
| sysfs-attribute creation and port-data initialisation ordering wrong. |
| |
| Signed-off-by: Johan Hovold <jhovold@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/io_ti.c | 14 +++++++------- |
| 1 file changed, 7 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/usb/serial/io_ti.c |
| +++ b/drivers/usb/serial/io_ti.c |
| @@ -2641,13 +2641,6 @@ static int edge_port_probe(struct usb_se |
| return -ENOMEM; |
| } |
| |
| - ret = edge_create_sysfs_attrs(port); |
| - if (ret) { |
| - kfifo_free(&edge_port->write_fifo); |
| - kfree(edge_port); |
| - return ret; |
| - } |
| - |
| spin_lock_init(&edge_port->ep_lock); |
| edge_port->port = port; |
| edge_port->edge_serial = usb_get_serial_data(port->serial); |
| @@ -2655,6 +2648,13 @@ static int edge_port_probe(struct usb_se |
| |
| usb_set_serial_port_data(port, edge_port); |
| |
| + ret = edge_create_sysfs_attrs(port); |
| + if (ret) { |
| + kfifo_free(&edge_port->write_fifo); |
| + kfree(edge_port); |
| + return ret; |
| + } |
| + |
| return 0; |
| } |
| |