1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-17 19:07:32 +02:00

busybox: Fix insmod for linux 3.0

Insmod silently rejected being run on any non 2.x kernel. Make its version
check allow newer kernels (and reject 2.4- when not enabling the 2.4
feature).

Signed-off-by: Jonas Gorski <jonas.gorski+openwrt@gmail.com>


git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27189 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
hauke 2011-06-15 21:17:52 +00:00
parent e6f792889d
commit 885f06942e

View File

@ -1,6 +1,6 @@
--- a/modutils/insmod.c --- a/modutils/insmod.c
+++ b/modutils/insmod.c +++ b/modutils/insmod.c
@@ -11,6 +11,99 @@ @@ -11,6 +11,106 @@
#include "libbb.h" #include "libbb.h"
#include "modutils.h" #include "modutils.h"
@ -37,20 +37,27 @@
+ char *module_dir, real_module_dir[FILENAME_MAX]; + char *module_dir, real_module_dir[FILENAME_MAX];
+ int len, slen, ret = ENOENT, k_version; + int len, slen, ret = ENOENT, k_version;
+ struct utsname myuname; + struct utsname myuname;
+ const char *suffix; + const char *suffix = ".ko";
+ struct stat st; + struct stat st;
+ +
+ /* check the kernel version */ + /* check the kernel version */
+ if ((uname(&myuname) != 0) || (myuname.release[0] != '2')) + if (uname(&myuname) != 0)
+ return EINVAL; + return EINVAL;
+ +
+ k_version = myuname.release[2] - '0'; + k_version = myuname.release[0] - '0';
+
+ if (k_version < 2 || k_version > 9)
+ return EINVAL;
+
+ if (k_version == 2) {
+ int k_patchlevel = myuname.release[2] - '0';
+ if (k_patchlevel <= 4)
+#if ENABLE_FEATURE_2_4_MODULES +#if ENABLE_FEATURE_2_4_MODULES
+ if (k_version <= 4) + suffix = ".o";
+ suffix = ".o"; +#else
+ else + return EINVAL;
+#endif +#endif
+ suffix = ".ko"; + }
+ +
+ len = strlen(filename); + len = strlen(filename);
+ slen = strlen(suffix); + slen = strlen(suffix);
@ -100,7 +107,7 @@
/* 2.6 style insmod has no options and required filename /* 2.6 style insmod has no options and required filename
* (not module name - .ko can't be omitted) */ * (not module name - .ko can't be omitted) */
@@ -59,9 +152,15 @@ int insmod_main(int argc UNUSED_PARAM, c @@ -59,9 +159,15 @@ int insmod_main(int argc UNUSED_PARAM, c
if (!filename) if (!filename)
bb_show_usage(); bb_show_usage();