Re: [PATCH] USB: serial/ftdi_sio.c Fix kernel oops

From: Ben Hutchings
Date: Wed Jun 12 2013 - 23:36:18 EST


On Fri, 2013-06-07 at 15:14 +0200, Lotfi Manseur wrote:
> Handle null termios in ftdi_set_termios(), introduced in
> commit 552f6bf1bb0eda0011c0525dd587aa9e7ba5b846
> This has been corrected in the mainline by
> commits c515598e0f5769916c31c00392cc2bfe6af74e55 and
> a816e3113b63753c330ca4751ea1d208e93e3015.
>
> This is to be fixed in longterm 2.6.32.60 and 3.4.47.
> This bug has been found with coccinelle.
>
> Signed-off-by: Lotfi Manseur <lotfi.manseur@xxxxxxx>
> Signed-off-by: Nicolas Palix <nicolas.palix@xxxxxxx>

I've queued up those changes for 3.2. This backported version seems
nicer, but we generally prefer to use patches that are as close as
possible to those in mainline.

Ben.

> ---
> drivers/usb/serial/ftdi_sio.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
> index c374beb..615bd9e 100644
> --- a/drivers/usb/serial/ftdi_sio.c
> +++ b/drivers/usb/serial/ftdi_sio.c
> @@ -2364,7 +2364,8 @@ static void ftdi_set_termios(struct tty_struct *tty,
>
> cflag = termios->c_cflag;
>
> - if (old_termios->c_cflag == termios->c_cflag
> + if (old_termios
> + && old_termios->c_cflag == termios->c_cflag
> && old_termios->c_ispeed == termios->c_ispeed
> && old_termios->c_ospeed == termios->c_ospeed)
> goto no_c_cflag_changes;
> @@ -2373,7 +2374,8 @@ static void ftdi_set_termios(struct tty_struct *tty,
> ftdi_sio_read_bulk_callback - need to examine what this means -
> don't see any problems yet */
>
> - if ((old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) ==
> + if (old_termios &&
> + (old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) ==
> (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)))
> goto no_data_parity_stop_changes;
>

--
Ben Hutchings
friends: People who know you well, but like you anyway.

Attachment: signature.asc
Description: This is a digitally signed message part