forked from Minki/linux
tty: Fix lookahead_buf crash with serdev
Do not follow a NULL pointer if the tty_port_client_operations does not
implement the ->lookahead_buf() callback, which is the case with
serdev's ttyport.
Reported-by: Hans de Goede <hdegoede@redhat.com>
Fixes: 6bb6fa6908
("tty: Implement lookahead to process XON/XOFF timely")
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
Link: https://lore.kernel.org/r/20220818115026.2237893-1-vincent.whitchurch@axis.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
846651eca0
commit
56c14fb408
@ -470,7 +470,6 @@ static void lookahead_bufs(struct tty_port *port, struct tty_buffer *head)
|
||||
|
||||
while (head) {
|
||||
struct tty_buffer *next;
|
||||
unsigned char *p, *f = NULL;
|
||||
unsigned int count;
|
||||
|
||||
/*
|
||||
@ -489,11 +488,16 @@ static void lookahead_bufs(struct tty_port *port, struct tty_buffer *head)
|
||||
continue;
|
||||
}
|
||||
|
||||
p = char_buf_ptr(head, head->lookahead);
|
||||
if (~head->flags & TTYB_NORMAL)
|
||||
f = flag_buf_ptr(head, head->lookahead);
|
||||
if (port->client_ops->lookahead_buf) {
|
||||
unsigned char *p, *f = NULL;
|
||||
|
||||
p = char_buf_ptr(head, head->lookahead);
|
||||
if (~head->flags & TTYB_NORMAL)
|
||||
f = flag_buf_ptr(head, head->lookahead);
|
||||
|
||||
port->client_ops->lookahead_buf(port, p, f, count);
|
||||
}
|
||||
|
||||
port->client_ops->lookahead_buf(port, p, f, count);
|
||||
head->lookahead += count;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user