On Mon, Mar 13, 2006 at 04:43:32PM -0500, Alan Stern wrote:
> On Mon, 13 Mar 2006, Paul Fulghum wrote:
> 
> > This patch correct the flaw identified by Pete Zaitcev.
> > 
> > Plus I now fully understand the sysfs oops.
> > It is not a problem with sysfs, so GregKH rightly ignored me.
> > 
> > A pointer to control_interface->dev is saved in the tty class device
> > object created by tty_register_device(). This reference is used to
> > create/destroy sysfs symlinks between the tty class device object and the
> > control_interface->dev. On disconnect control_interface->dev is released.
> > tty_unregister_device() is called later when the last tty file desc
> > is closed. tty_unregister_device() then passes the stale pointer
> > to sysfs_remove_link() causing the oops if the slab debug is turned on.
> > 
> > So the below patch seems the cleanest way of fixing this.
> 
> Wouldn't it be better to do get_device() on control_interface->dev just
> before calling tty_register_device(), so that the data structure isn't
> released too soon?  (And of course, call put_device() after the tty
> device is unregistered.)  That way all the sysfs links remain intact, as
> intended.

The sysfs core does the 'get' when it creates the symlink.  I'm guessing
that the acm driver isn't properly handing the reference counting of it,
but I haven't looked into it much just yet...

Again, I don't think this is the correct change, as we want that symlink
there.

thanks,

greg k-h


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to