Re: [PATCH] ipmi_msghandler module load failure
From: Corey Minyard
Date: Fri Jul 16 2004 - 21:11:14 EST
So they've added enforcement so that non-init code cannot call init
code. The call as it was is actually safe, there is a variable that
will only cause it to be called if it has not been called yet (there
are possible reasons to do this when the driver is compiled into the
kernel) and it always gets called at init time. The the enforcement is
probably a good thing, though. The patch looks ok.
-Corey
Khalid Aziz wrote:
Corey,
On a 2.6.7 kernel, when I try to modprobe ipmi_msghandler, it fails to
load with following message:
FATAL: Error inserting ipmi_msghandler (/lib/modules/2.6.7/kernel/drivers/char/ipmi/ipmi_msghandler.ko): Invalid module format
And there is an error message in dmesg:
ipmi_msghandler: init symbol 0xa000000200058080 used in module code at a000000200031b32
What I have been able to determine is that ipmi_msghandler.c defines
ipmi_init_msghandler() as the module_init() routine and then it also
calls ipmi_init_msghandler() diretcly from couple of other places. This
does not seem to be okay in 2.6.7 kernel. I was able to fix this by
defining a new module_init routine which in turn calls
ipmi_init_msghandler(). I also removed __init from
ipmi_init_msghandler() since it gets called from ipmi_open() on an open
of the ipmi device file. So I would think we want to keep
ipmi_init_msghandler() around even after initialization. Here is the
patch. Please apply if it looks good:
--- linux-2.6.7/drivers/char/ipmi/ipmi_msghandler.c 2004-06-15 23:19:36.000000000 -0600
+++ linux-2.6.7.new/drivers/char/ipmi/ipmi_msghandler.c 2004-07-16 10:28:52.000000000 -0600
@@ -3072,7 +3072,7 @@
200 /* priority: INT_MAX >= x >= 0 */
};
-static __init int ipmi_init_msghandler(void)
+static int ipmi_init_msghandler(void)
{
int i;
@@ -3107,6 +3107,11 @@
return 0;
}
+static __init int ipmi_init_msghandler_mod(void)
+{
+ ipmi_init_msghandler();
+}
+
static __exit void cleanup_ipmi(void)
{
int count;
@@ -3143,7 +3148,7 @@
}
module_exit(cleanup_ipmi);
-module_init(ipmi_init_msghandler);
+module_init(ipmi_init_msghandler_mod);
MODULE_LICENSE("GPL");
EXPORT_SYMBOL(ipmi_alloc_recv_msg);
-
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/