Commit 0fa84af8 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'usb-serial-5.7-rc1' of...

Merge tag 'usb-serial-5.7-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next

Johan writes:

USB-serial updates for 5.7-rc1

Here are the USB-serial updates for 5.7-rc1, including:

 - support for a new family of Fintek devices
 - fix for an io-edgeport slab-out-of-bounds access
 - fixes for a couple of kernel-doc issues

Included are also various clean ups and some new modem device ids.

All but the io-edgeport fix have been in linux-next with no reported
issues.

* tag 'usb-serial-5.7-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
  USB: serial: io_edgeport: fix slab-out-of-bounds read in edge_interrupt_callback
  USB: serial: option: add Wistron Neweb D19Q1
  USB: serial: option: add BroadMobi BM806U
  USB: serial: option: add support for ASKEY WWHC050
  USB: serial: f81232: add control driver for F81534A
  USB: serial: fix tty cleanup-op kernel-doc
  USB: serial: clean up carrier-detect helper
  USB: serial: f81232: set F81534A serial port with RS232 mode
  USB: serial: f81232: add F81534A support
  USB: serial: f81232: use devm_kzalloc for port data
  USB: serial: f81232: add tx_empty function
  USB: serial: f81232: extract LSR handler
  USB: serial: digi_acceleport: remove redundant assignment to pointer priv
  USB: serial: relax unthrottle memory barrier
parents a599a0fb 57aa9f29
...@@ -1472,7 +1472,7 @@ static int digi_read_oob_callback(struct urb *urb) ...@@ -1472,7 +1472,7 @@ static int digi_read_oob_callback(struct urb *urb)
struct usb_serial_port *port = urb->context; struct usb_serial_port *port = urb->context;
struct usb_serial *serial = port->serial; struct usb_serial *serial = port->serial;
struct tty_struct *tty; struct tty_struct *tty;
struct digi_port *priv = usb_get_serial_port_data(port); struct digi_port *priv;
unsigned char *buf = urb->transfer_buffer; unsigned char *buf = urb->transfer_buffer;
int opcode, line, status, val; int opcode, line, status, val;
unsigned long flags; unsigned long flags;
......
This diff is collapsed.
...@@ -417,7 +417,7 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb) ...@@ -417,7 +417,7 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb)
/* /*
* Make sure URB is marked as free before checking the throttled flag * Make sure URB is marked as free before checking the throttled flag
* to avoid racing with unthrottle() on another CPU. Matches the * to avoid racing with unthrottle() on another CPU. Matches the
* smp_mb() in unthrottle(). * smp_mb__after_atomic() in unthrottle().
*/ */
smp_mb__after_atomic(); smp_mb__after_atomic();
...@@ -489,7 +489,7 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty) ...@@ -489,7 +489,7 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty)
* Matches the smp_mb__after_atomic() in * Matches the smp_mb__after_atomic() in
* usb_serial_generic_read_bulk_callback(). * usb_serial_generic_read_bulk_callback().
*/ */
smp_mb(); smp_mb__after_atomic();
usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); usb_serial_generic_submit_read_urbs(port, GFP_KERNEL);
} }
...@@ -609,12 +609,10 @@ EXPORT_SYMBOL_GPL(usb_serial_handle_break); ...@@ -609,12 +609,10 @@ EXPORT_SYMBOL_GPL(usb_serial_handle_break);
* @tty: tty for the port * @tty: tty for the port
* @status: new carrier detect status, nonzero if active * @status: new carrier detect status, nonzero if active
*/ */
void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port, void usb_serial_handle_dcd_change(struct usb_serial_port *port,
struct tty_struct *tty, unsigned int status) struct tty_struct *tty, unsigned int status)
{ {
struct tty_port *port = &usb_port->port; dev_dbg(&port->dev, "%s - status %d\n", __func__, status);
dev_dbg(&usb_port->dev, "%s - status %d\n", __func__, status);
if (tty) { if (tty) {
struct tty_ldisc *ld = tty_ldisc_ref(tty); struct tty_ldisc *ld = tty_ldisc_ref(tty);
...@@ -627,7 +625,7 @@ void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port, ...@@ -627,7 +625,7 @@ void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
} }
if (status) if (status)
wake_up_interruptible(&port->open_wait); wake_up_interruptible(&port->port.open_wait);
else if (tty && !C_CLOCAL(tty)) else if (tty && !C_CLOCAL(tty))
tty_hangup(tty); tty_hangup(tty);
} }
......
...@@ -710,7 +710,7 @@ static void edge_interrupt_callback(struct urb *urb) ...@@ -710,7 +710,7 @@ static void edge_interrupt_callback(struct urb *urb)
/* grab the txcredits for the ports if available */ /* grab the txcredits for the ports if available */
position = 2; position = 2;
portNumber = 0; portNumber = 0;
while ((position < length) && while ((position < length - 1) &&
(portNumber < edge_serial->serial->num_ports)) { (portNumber < edge_serial->serial->num_ports)) {
txCredits = data[position] | (data[position+1] << 8); txCredits = data[position] | (data[position+1] << 8);
if (txCredits) { if (txCredits) {
......
...@@ -1992,8 +1992,14 @@ static const struct usb_device_id option_ids[] = { ...@@ -1992,8 +1992,14 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */ { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */
{ USB_DEVICE_INTERFACE_CLASS(0x1435, 0xd191, 0xff), /* Wistron Neweb D19Q1 */
.driver_info = RSVD(1) | RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x1690, 0x7588, 0xff), /* ASKEY WWHC050 */
.driver_info = RSVD(1) | RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */ { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */
.driver_info = RSVD(4) }, .driver_info = RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2033, 0xff), /* BroadMobi BM806U */
.driver_info = RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */ { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */
.driver_info = RSVD(4) }, .driver_info = RSVD(4) },
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */ { USB_DEVICE_INTERFACE_CLASS(0x2020, 0x4000, 0xff) }, /* OLICARD300 - MT6225 */
......
...@@ -288,7 +288,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp) ...@@ -288,7 +288,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp)
/** /**
* serial_cleanup - free resources post close/hangup * serial_cleanup - free resources post close/hangup
* @port: port to free up * @tty: tty to clean up
* *
* Do the resource freeing and refcount dropping for the port. * Do the resource freeing and refcount dropping for the port.
* Avoid freeing the console. * Avoid freeing the console.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment