Re: sysfs-related oops during module unload (2.6.16-rc2)

Nathan Lynch
2006-02-12T05:27:56Z

Greg KH wrote:
> On Sat, Feb 11, 2006 at 04:03:53PM -0600, Nathan Lynch wrote:
> > If the refcnt attribute of a module is open when the module is
> > unloaded, we get an oops when the file is closed. I used ide_cd for
> > this report but I don't think the oops is caused by the driver itself.
> > This bug seems to be restricted to the /sys/module hierarchy; it
> > doesn't happen with /sys/class etc.
> >
> > I suspect it's an extra put or a missing get somewhere, but the fix
> > isn't obvious to me after looking at it for a little while, so I'm
> > punting.
> >
> > I'm pretty sure this happens with 2.6.15; I can double-check if
> > needed.
>
> Ugh, we aren't setting the owner of these fields properly, good catch.
>
> Does the patch below (built tested only), solve this for you?

Thanks, but no, I get the same oops. The refcnt attribute isn't part
of the modinfo_attrs array.

> kernel/module.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> --- gregkh-2.6.orig/kernel/module.c 2006-01-17 08:27:49.000000000 -0800
> +++ gregkh-2.6/kernel/module.c 2006-02-11 14:44:19.000000000 -0800
> @@ -1085,8 +1085,10 @@
>
> for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
> if (!attr->test ||
> - (attr->test && attr->test(mod)))
> + (attr->test && attr->test(mod))) {
> + attr->attr.owner = mod;
> error = sysfs_create_file(&mod->mkobj.kobj,&attr->attr);
> + }
> }
> return error;
> }