aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/safe_serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/serial/safe_serial.c')
-rw-r--r--drivers/usb/serial/safe_serial.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
index ad12e9e2c7ee..21cd7bf2a8cc 100644
--- a/drivers/usb/serial/safe_serial.c
+++ b/drivers/usb/serial/safe_serial.c
@@ -207,38 +207,31 @@ static void safe_process_read_urb(struct urb *urb)
207 unsigned char *data = urb->transfer_buffer; 207 unsigned char *data = urb->transfer_buffer;
208 unsigned char length = urb->actual_length; 208 unsigned char length = urb->actual_length;
209 int actual_length; 209 int actual_length;
210 struct tty_struct *tty;
211 __u16 fcs; 210 __u16 fcs;
212 211
213 if (!length) 212 if (!length)
214 return; 213 return;
215 214
216 tty = tty_port_tty_get(&port->port);
217 if (!tty)
218 return;
219
220 if (!safe) 215 if (!safe)
221 goto out; 216 goto out;
222 217
223 fcs = fcs_compute10(data, length, CRC10_INITFCS); 218 fcs = fcs_compute10(data, length, CRC10_INITFCS);
224 if (fcs) { 219 if (fcs) {
225 dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); 220 dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs);
226 goto err; 221 return;
227 } 222 }
228 223
229 actual_length = data[length - 2] >> 2; 224 actual_length = data[length - 2] >> 2;
230 if (actual_length > (length - 2)) { 225 if (actual_length > (length - 2)) {
231 dev_err(&port->dev, "%s - inconsistent lengths %d:%d\n", 226 dev_err(&port->dev, "%s - inconsistent lengths %d:%d\n",
232 __func__, actual_length, length); 227 __func__, actual_length, length);
233 goto err; 228 return;
234 } 229 }
235 dev_info(&urb->dev->dev, "%s - actual: %d\n", __func__, actual_length); 230 dev_info(&urb->dev->dev, "%s - actual: %d\n", __func__, actual_length);
236 length = actual_length; 231 length = actual_length;
237out: 232out:
238 tty_insert_flip_string(&port->port, data, length); 233 tty_insert_flip_string(&port->port, data, length);
239 tty_flip_buffer_push(tty); 234 tty_flip_buffer_push(&port->port);
240err:
241 tty_kref_put(tty);
242} 235}
243 236
244static int safe_prepare_write_buffer(struct usb_serial_port *port, 237static int safe_prepare_write_buffer(struct usb_serial_port *port,