Messages in this thread Patch in this message | | | From | Rusty Russell <> | Subject | Re: [PATCH] modules: sysfs - export: taint, address, size | Date | Mon, 09 Jan 2012 17:57:16 +1030 |
| |
On Sat, 07 Jan 2012 16:44:36 +0100, Kay Sievers <kay.sievers@vrfy.org> wrote: > From: Kay Sievers <kay.sievers@vrfy.org> > Subject: modules: sysfs - export taint, address, size > > Recent tools do not use /proc to retrieve module information. A few values > are currently missing from sysfs.
Well, strace says lsmod still does. Is libkmod doing something different? Should we be deprecating /proc/modules?
> Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi> > Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> > --- > kernel/module.c | 89 +++++++++++++++++++++++++++++++++++++++----------------- > 1 file changed, 62 insertions(+), 27 deletions(-) > > --- a/kernel/module.c > +++ b/kernel/module.c > @@ -849,6 +849,26 @@ out: > return ret; > } > > +static size_t module_flags_taint(struct module *mod, char *buf) > +{ > + size_t l = 0; > + > + if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE)) > + buf[l++] = 'P'; > + else if (mod->taints & (1 << TAINT_OOT_MODULE)) > + buf[l++] = 'O'; > + if (mod->taints & (1 << TAINT_FORCED_MODULE)) > + buf[l++] = 'F'; > + if (mod->taints & (1 << TAINT_CRAP)) > + buf[l++] = 'C'; > + /* > + * TAINT_FORCED_RMMOD: could be added. > + * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't > + * apply to modules. > + */ > + return l; > +}
The else here is weird. Shouldn't we leave the exclusion elsewhere?
> +static ssize_t show_address(struct module_attribute *mattr, > + struct module_kobject *mk, char *buffer) > +{ > + return sprintf(buffer, "0x%pK\n", mk->mod->module_core); > +} > + > +struct module_attribute module_address = > + __ATTR(address, 0444, show_address, NULL); > + > +static ssize_t show_size(struct module_attribute *mattr, > + struct module_kobject *mk, char *buffer) > +{ > + return sprintf(buffer, "%u\n", mk->mod->init_size + mk->mod->core_size); > +} > + > +struct module_attribute module_size = > + __ATTR(size, 0444, show_size, NULL);
This copies a past mistake, and is definitely wrong. Either expose both pointers and sizes, or don't include init_size here. Sure, it'll normally be 0, but if not it's confusing...
But the bigger question is: Why are we exposing these sizes? /proc/modules did since 2.2, or before, but that doesn't make it the best option...
Cheers, Rusty.
| |