Re: tty: usb-serial krefs - bad magic number for tty struct (188:0)

From: Sergio Luis
Date: Sun Oct 19 2008 - 13:39:59 EST


On Sat, Oct 18, 2008 at 1:15 PM, Sergio Luis <eeeesti@xxxxxxxxx> wrote:
> Hello,
>
> commit 4a90f09b20f4622dcbff1f0e1e6bae1704f8ad8c
>
> tty: usb-serial krefs
>
> Use kref in the USB serial drivers so that we don't free tty structures
> from under the URB receive handlers as has historically been the case if
> you were unlucky. This also gives us a framework for general tty drivers to
> use tty_port objects and refcount.
>
> Contains two err->dev_err changes merged together to fix clashes in the
> -next tree.
>
> Signed-off-by: Alan Cox <alan@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
>
> ----
>
> causes problems with my usb hsdpa modem. when I try to connect pppd
> dies and I get these messages on dmesg:
>
> [...]
> usb-storage: device scan complete
> PPP generic driver version 2.4.2
> bad magic number for tty struct (188:0) in tty_ioctl
> bad magic number for tty struct (188:0) in tty_ioctl
> bad magic number for tty struct (188:0) in tty_release_dev
> bad magic number for tty struct (188:0) in tty_poll
> bad magic number for tty struct (188:0) in tty_poll
> bad magic number for tty struct (188:0) in tty_write
> bad magic number for tty struct (188:0) in tty_ioctl
> bad magic number for tty struct (188:0) in tty_ioctl
> bad magic number for tty struct (188:0) in tty_ioctl
> bad magic number for tty struct (188:0) in tty_release_dev
>
> ---
>
> drivers/usb/serial/ChangeLog.history has this:
>
> (03/26/2002) gkh
> removed the port->tty check from port_paranoia_check() due to serial
> consoles not having a tty device assigned to them.
>
> and this seems to be the problem here.
> something in this commit seems to make it reach the tty_paranoia_check
> in tty_ioctl() from drivers/char/tty_io.c, but I could be completely
> wrong.
>
> Sergio.
>
Hello,

one of the problems was the tty_kref_put(tty) in
usb_serial_port_work() [drivers/usb/serial/usb-serial.c], that was
releasing the tty device. I removed that line and it _almost_ worked.
well, it worked, but only _once_. If I stopped the daemon and tried to
start it again, it would give me I/O error and would not open
/dev/ttyUSB0 anymore.
I'd suggest to revert that commit and to review it more carefully.
What do you people think?

Thanks,
Sergio.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/