diff options
author | Alexey Khoroshilov <khoroshilov@ispras.ru> | 2012-09-13 14:56:55 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-14 00:48:48 -0400 |
commit | 8321652ae22f38830af5b553f3a316d68948ddce (patch) | |
tree | 50f5c69c176d43d5e86e2cc3382dc199c3bce427 | |
parent | 17e6791082e3dc34d0b43fd50ff8655fdfcc3a99 (diff) |
USB: omninet: fix potential tty NULL dereference
Add check for return value of tty_port_tty_get,
since it can return NULL after port hangup that may happen anytime.
Found by Linux Driver Verification project (linuxtesting.org).
Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/serial/omninet.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c index d31f661d758c..f524cd910e2c 100644 --- a/drivers/usb/serial/omninet.c +++ b/drivers/usb/serial/omninet.c | |||
@@ -185,10 +185,12 @@ static void omninet_read_bulk_callback(struct urb *urb) | |||
185 | 185 | ||
186 | if (urb->actual_length && header->oh_len) { | 186 | if (urb->actual_length && header->oh_len) { |
187 | struct tty_struct *tty = tty_port_tty_get(&port->port); | 187 | struct tty_struct *tty = tty_port_tty_get(&port->port); |
188 | tty_insert_flip_string(tty, data + OMNINET_DATAOFFSET, | 188 | if (tty) { |
189 | tty_insert_flip_string(tty, data + OMNINET_DATAOFFSET, | ||
189 | header->oh_len); | 190 | header->oh_len); |
190 | tty_flip_buffer_push(tty); | 191 | tty_flip_buffer_push(tty); |
191 | tty_kref_put(tty); | 192 | tty_kref_put(tty); |
193 | } | ||
192 | } | 194 | } |
193 | 195 | ||
194 | /* Continue trying to always read */ | 196 | /* Continue trying to always read */ |