busybox: Fix insmod for linux 3.0
[openwrt/openwrt.git] / package / busybox / patches / 470-insmod_search.patch
index 8c5741d17fe2c27ae7de75b121a511658a7e1a64..b5314e3f0d83b1bb48da9fe897708eec56603138 100644 (file)
@@ -1,6 +1,6 @@
 --- a/modutils/insmod.c
 +++ b/modutils/insmod.c
-@@ -11,6 +11,99 @@
+@@ -11,6 +11,106 @@
  
  #include "libbb.h"
  #include "modutils.h"
 +      char *module_dir, real_module_dir[FILENAME_MAX];
 +      int len, slen, ret = ENOENT, k_version;
 +      struct utsname myuname;
-+      const char *suffix;
++      const char *suffix = ".ko";
 +      struct stat st;
 +
 +      /* check the kernel version */
-+      if ((uname(&myuname) != 0) || (myuname.release[0] != '2'))
++      if (uname(&myuname) != 0)
 +              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 (k_version <= 4)
-+              suffix = ".o";
-+      else
++                      suffix = ".o";
++#else
++                      return EINVAL;
 +#endif
-+              suffix = ".ko";
++      }
 +
 +      len = strlen(filename);
 +      slen = strlen(suffix);
  
  /* 2.6 style insmod has no options and required filename
   * (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)
                bb_show_usage();