Messages in this thread | | | Date | Thu, 14 Apr 2005 23:06:21 +0400 | From | Sergey Vlasov <> | Subject | Re: [OOPS] on usb removal, and minicom closing 2.6.11.7 |
| |
On Thu, 14 Apr 2005 14:40:36 +0200 Grzegorz Piotr Jaskiewicz wrote:
> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Works great, I would like to ask everyone here on lkml to consider > adding this patch to mainline. > This ain't naughty solution, checking for object/pointer/whatever if > exists before doing anything with it, is good.
No, this patch is broken. It just avoids the problem in 99% of cases, but it is not reliable. The real problem is that refcounting in cdc-acm is broken, and the kernel is accessing freed memory.
The patches which really seem to fix the underlying problem can be found in this thread:
http://thread.gmane.org/gmane.linux.usb.devel/32977
(see "[PATCH] N/3 cdc acm errors").
You also need this driver core fix:
http://thread.gmane.org/gmane.linux.usb.devel/33132
> Anyone? > > Buy the way, I am also looking for usblan for 2.6, can I use usbnet > instead ? Anyone ported usblan to 2.6 (it's on GPL). > > JustMan wrote: > >>So, > >> > >>I plugged in e680 motorola phone, played a bit with minicom on > >>/dev/ttyACM0, and when I closed minicom, got this oops. USB is useless, > >>got to reboot computer to use it again! > >>it's vanilla 2.6.11.7 > >> > >>oops attached. > >> > > > > > > Try attached patch... (nasty solution, but it work for my C350 motorola phone) > > > > > >> > > > > > > ------------------------------------------------------------------------ > > > > diff -uNrp linux/drivers/base/class.orig.c linux/drivers/base/class.c > > --- linux/drivers/base/class.orig.c 2005-03-10 12:19:00.000000000 +0300 > > +++ linux/drivers/base/class.c 2005-03-10 13:59:27.000000000 +0300 > > @@ -307,12 +307,14 @@ static int class_hotplug(struct kset *ks > > if (class_dev->dev) { > > /* add physical device, backing this device */ > > struct device *dev = class_dev->dev; > > - char *path = kobject_get_path(&dev->kobj, GFP_KERNEL); > > > > - add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, > > - &length, "PHYSDEVPATH=%s", path); > > - kfree(path); > > + if(kobject_name(&dev->kobj)) { > > + char *path = kobject_get_path(&dev->kobj, GFP_KERNEL); > > > > + add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, > > + &length, "PHYSDEVPATH=%s", path); > > + kfree(path); > > + } > > /* add bus name of physical device */ > > if (dev->bus) > > add_hotplug_env_var(envp, num_envp, &i, > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.0 (GNU/Linux) > > iD8DBQFCXmTEi0HtPCVkDAURAvIMAJ4+8tKj6jt/ErTtCrsmNYtM2aDfNACgigLA > 4GbLbHStQJBq+Ez1lFe+lPo= > =UWvD > -----END PGP SIGNATURE----- [unhandled content-type:application/pgp-signature] | |