Re: Bug in kmem_cache_create with duplicate names

From: Steven Rostedt
Date: Tue Dec 07 2004 - 13:27:21 EST


On Tue, 2004-12-07 at 10:57 -0700, Peter W. Morreale wrote:

> >
> >Now this raises the issue of name space, this will bug if two modules
> >use the same cache name. If this happens with two different vendors,
> >than the poor user will have to figure out who to blame.
> >
>
> No different than any other global namespace issue.

I beg to differ. If I have two modules that export the same name, do I
get a bug when I load the second module? No. Actually, I just tried it
and this raises another issue. There is no test to see if there is a
conflict of name spaces. Here's what I did, I made two modules that
have a function named "abc" and exported them. The third module calls
function "abc". The result was that both mod1 and mod2 were loaded with
no problem, and mod3 called mod2's abc.

Below are the simple modules that did this test. Should this be a
problem, or issue? It has a little bit of a polymorphism effect. If I
unload mod3 and then mod2, then reload mod3, it calls mod1's abc (as
expected). If I unload mod3 again, reload mod2, then reload mod3, it
calls mod2's abc again.

Well, anyway, I don't think that the kernel should crash due to a
namespace problem with caches. But that's just my opinion. And for all
of you that were so concerned... Yes I did fix my code ;-)



mod1.c:
---------------------------------
#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>

void abc(void)
{
printk("hello from mod1\n");
}

EXPORT_SYMBOL(abc);

static int __init mod1_init(void)
{
printk("loaded mod1\n");
return 0;
}

static void __exit mod1_exit(void)
{
printk("unloaded mod1\n");
}

module_init(mod1_init);
module_exit(mod1_exit);

MODULE_LICENSE("GPL");
----------------------------------------


mod2.c:
----------------------------------------
#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>

void abc(void)
{
printk("hello from mod2\n");
}

EXPORT_SYMBOL(abc);

static int __init mod2_init(void)
{
printk("loaded mod2\n");
return 0;
}

static void __exit mod2_exit(void)
{
printk("unloaded mod2\n");
}

module_init(mod2_init);
module_exit(mod2_exit);

MODULE_LICENSE("GPL");
-------------------------------

mod3.c:
-------------------------------
#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>

extern void abc(void);

static int __init mod3_init(void)
{
printk("loaded mod3\n");

printk("running abc\n");
abc();

return 0;
}

static void __exit mod3_exit(void)
{
printk("unloaded mod3\n");
}

module_init(mod3_init);
module_exit(mod3_exit);

MODULE_LICENSE("GPL");
-------------------------------------


-
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/