From 2e264f037e72834097f4e1e55f1e8c296e1f2037 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 19 May 2010 00:01:32 +0200 Subject: [PATCH] --- yaml --- r: 195525 b: refs/heads/master c: 6d1bf48e240bde4e9c7313ccdd2fe32f37f67ad4 h: refs/heads/master i: 195523: 555b29d9bb7bf487edc4ec06f7b5a58e894730cf v: v3 --- [refs] | 2 +- trunk/drivers/usb/serial/safe_serial.c | 43 +++++++++++++------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/[refs] b/[refs] index e4ba1655b966..74a1f3eb9996 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 12e2e52cc578714d5824a27dd1a131a5418d636b +refs/heads/master: 6d1bf48e240bde4e9c7313ccdd2fe32f37f67ad4 diff --git a/trunk/drivers/usb/serial/safe_serial.c b/trunk/drivers/usb/serial/safe_serial.c index d9af5c5ed9e8..a36e2313eed0 100644 --- a/trunk/drivers/usb/serial/safe_serial.c +++ b/trunk/drivers/usb/serial/safe_serial.c @@ -218,7 +218,9 @@ static void safe_process_read_urb(struct urb *urb) struct usb_serial_port *port = urb->context; unsigned char *data = urb->transfer_buffer; unsigned char length = urb->actual_length; + int actual_length; struct tty_struct *tty; + __u16 fcs; if (!length) return; @@ -227,30 +229,27 @@ static void safe_process_read_urb(struct urb *urb) if (!tty) return; - if (safe) { - __u16 fcs; - fcs = fcs_compute10(data, length, CRC10_INITFCS); - if (!fcs) { - int actual_length = data[length - 2] >> 2; - if (actual_length <= (length - 2)) { - dev_info(&urb->dev->dev, "%s - actual: %d\n", - __func__, actual_length); - tty_insert_flip_string(tty, - data, actual_length); - tty_flip_buffer_push(tty); - } else { - dev_err(&port->dev, - "%s - inconsistent lengths %d:%d\n", - __func__, actual_length, length); - } - } else { - dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); - } - } else { - tty_insert_flip_string(tty, data, length); - tty_flip_buffer_push(tty); + if (!safe) + goto out; + + fcs = fcs_compute10(data, length, CRC10_INITFCS); + if (fcs) { + dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); + goto err; } + actual_length = data[length - 2] >> 2; + if (actual_length > (length - 2)) { + dev_err(&port->dev, "%s - inconsistent lengths %d:%d\n", + __func__, actual_length, length); + goto err; + } + dev_info(&urb->dev->dev, "%s - actual: %d\n", __func__, actual_length); + length = actual_length; +out: + tty_insert_flip_string(tty, data, length); + tty_flip_buffer_push(tty); +err: tty_kref_put(tty); }