Changeset 9146


Ignore:
Timestamp:
2007-10-05T22:09:55+02:00 (10 years ago)
Author:
nbd
Message:

fix segfault with insmod on 2.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/busybox/patches/470-insmod_search.patch

    r9137 r9146  
    22=================================================================== 
    33--- busybox-1.7.2.orig/modutils/insmod.c        2007-10-05 14:39:19.922555340 +0200 
    4 +++ busybox-1.7.2/modutils/insmod.c     2007-10-05 14:59:26.327304435 +0200 
     4+++ busybox-1.7.2/modutils/insmod.c     2007-10-05 21:08:55.442650322 +0200 
    55@@ -61,19 +61,107 @@ 
    66 #include "libbb.h" 
     
    161161 { 
    162162        struct arch_file *f; 
    163 @@ -3952,33 +4008,33 @@ 
     163@@ -3952,145 +4008,57 @@ 
    164164 void print_load_map(struct obj_file *f); 
    165165 #endif 
     
    177177        struct obj_file *f; 
    178178-       struct stat st; 
    179         char *m_name = 0; 
     179-       char *m_name = 0; 
    180180-       int exit_status = EXIT_FAILURE; 
     181+       char *tmp = NULL, *m_name = NULL; 
    181182+       int ret = EINVAL; 
    182183        int m_has_modinfo; 
     
    207208        getopt32(argv, OPTION_STR, &opt_o); 
    208209        arg1 = argv[optind]; 
    209 @@ -3987,110 +4043,18 @@ 
     210        if (option_mask32 & OPT_o) { // -o /* name the output module */ 
     211-               free(m_name); 
    210212                m_name = xstrdup(opt_o); 
    211213        } 
     
    226228-               } 
    227229-       } 
    228 - 
     230  
    229231-#if ENABLE_FEATURE_2_6_MODULES 
    230232-       if (k_version > 4 && len > 3 && tmp[len - 3] == '.' 
     
    247249-#endif 
    248250-               m_fullName = xasprintf("%s.o", tmp); 
    249   
    250 -       if (!m_name) { 
     251+       ret = find_module(arg1); 
     252+       if (ret) 
     253+               goto out; 
     254  
     255        if (!m_name) { 
    251256-               m_name = tmp; 
    252257-       } else { 
    253258-               free(tmp1); 
    254259-               tmp1 = 0;       /* flag for free(m_name) before exit() */ 
    255 -       } 
    256 - 
     260+               tmp = xstrdup(arg1); 
     261+               m_name = basename(tmp); 
     262        } 
     263  
    257264-       /* Get a filedesc for the module.  Check we we have a complete path */ 
    258265-       if (stat(arg1, &st) < 0 || !S_ISREG(st.st_mode) 
     
    308315-       if (flag_verbose) 
    309316-               printf("Using %s\n", m_filename); 
    310 +       ret = find_module(arg1); 
    311 +       if (ret) 
    312 +               goto out; 
    313   
     317- 
    314318-#if ENABLE_FEATURE_2_6_MODULES 
    315319-       if (k_version > 4) { 
     
    326330        f = obj_load(fp, LOADBITS); 
    327331        if (f == NULL) 
    328 @@ -4120,7 +4084,7 @@ 
     332@@ -4120,7 +4088,7 @@ 
    329333                                "\t%s was compiled for kernel version %s\n" 
    330334                                "\twhile this kernel is version %s", 
     
    335339                                goto out; 
    336340                } 
    337 @@ -4173,7 +4137,7 @@ 
     341@@ -4173,7 +4141,7 @@ 
    338342        hide_special_symbols(f); 
    339343  
     
    344348  
    345349        new_create_module_ksymtab(f); 
    346 @@ -4220,8 +4184,7 @@ 
     350@@ -4220,30 +4188,22 @@ 
    347351        if (flag_print_load_map) 
    348352                print_load_map(f); 
     
    354358 #if ENABLE_FEATURE_CLEAN_UP 
    355359        if (fp) 
    356 @@ -4229,21 +4192,13 @@ 
    357         free(tmp1); 
    358         if (!tmp1) 
     360                fclose(fp); 
     361-       free(tmp1); 
     362-       if (!tmp1) 
     363+       if (tmp) 
     364+               free(tmp); 
     365+       else if (m_name) 
    359366                free(m_name); 
    360367-       free(m_filename); 
     
    378385 static const char *moderror(int err) 
    379386 { 
    380 @@ -4261,19 +4216,33 @@ 
     387@@ -4261,19 +4221,33 @@ 
    381388        } 
    382389 } 
     
    417424        options = xzalloc(1); 
    418425        optlen = 0; 
    419 @@ -4283,36 +4252,46 @@ 
     426@@ -4283,36 +4257,46 @@ 
    420427                optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv); 
    421428        } 
Note: See TracChangeset for help on using the changeset viewer.