tty: Fix leak in ti-usb

If the ti-usb adapter returns an zero data length frame (which happens)
then we leak a kref. Found by Christoph Mair <christoph.mair@gmail.com>
who proposed a patch. The patch here is different as Christoph's patch
didn't work for the case where tty = NULL and data arrived but Christoph
did all the hard work chasing it down.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Alan Cox and committed by Linus Torvalds cf545093 7a9a65ce

+13 -11
+13 -11
drivers/usb/serial/ti_usb_3410_5052.c
··· 1215 1215 } 1216 1216 1217 1217 tty = tty_port_tty_get(&port->port); 1218 - if (tty && urb->actual_length) { 1219 - usb_serial_debug_data(debug, dev, __func__, 1220 - urb->actual_length, urb->transfer_buffer); 1218 + if (tty) { 1219 + if (urb->actual_length) { 1220 + usb_serial_debug_data(debug, dev, __func__, 1221 + urb->actual_length, urb->transfer_buffer); 1221 1222 1222 - if (!tport->tp_is_open) 1223 - dbg("%s - port closed, dropping data", __func__); 1224 - else 1225 - ti_recv(&urb->dev->dev, tty, 1223 + if (!tport->tp_is_open) 1224 + dbg("%s - port closed, dropping data", 1225 + __func__); 1226 + else 1227 + ti_recv(&urb->dev->dev, tty, 1226 1228 urb->transfer_buffer, 1227 1229 urb->actual_length); 1228 - 1229 - spin_lock(&tport->tp_lock); 1230 - tport->tp_icount.rx += urb->actual_length; 1231 - spin_unlock(&tport->tp_lock); 1230 + spin_lock(&tport->tp_lock); 1231 + tport->tp_icount.rx += urb->actual_length; 1232 + spin_unlock(&tport->tp_lock); 1233 + } 1232 1234 tty_kref_put(tty); 1233 1235 } 1234 1236