Re: /proc/kallsyms race vs module unload

From: Paulo Marques
Date: Wed Mar 14 2007 - 08:17:46 EST


Alexey Dobriyan wrote:
On Tue, Mar 13, 2007 at 06:49:50PM +0000, Paulo Marques wrote:
Alexey Dobriyan wrote:
[...]
What happens is that module_get_kallsym() drops module_mutex,
returns "struct module *", module unloaded, "struct module *"
used.
The only use for the "struct module *" is to display the name of the
module.

Ehh?

This can be solved by adding a "char mod_name[MODULE_NAME_LEN];" field
to "kallsym_iter" and copy the name of the module over, while still
holding module_mutex. It would be slightly slower, but safer.

iter->owner = module_get_kallsym(iter->pos - kallsyms_num_syms,
&iter->value, &iter->type,
iter->name, sizeof(iter->name));
if (iter->owner == NULL)
return 0;

/* Label it "global" if it is exported, "local" if not exported. */
iter->type = is_exported(iter->name, iter->owner)
^^^^^^^^^^^

Yes, there is this "is_exported" call, but his can be moved completely into "module_get_kallsym" and have the "type" returned be already upper / lower case.

That, together with filling the module name "module_get_kallsym()" would make the returned "struct module *" unneeded.

Since kallsyms is the only caller of that function, we can change its interface to not return a "struct module *" at all, and return just an integer that means "symbol found" or "no more symbols".

I'm still volunteering to do that patch, but you seem more active than me at the moment...

--
Paulo Marques
Software Development Department - Grupo PIE, S.A.
Phone: +351 252 290600, Fax: +351 252 290601
Web: www.grupopie.com
-
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/