diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 169 |
1 files changed, 70 insertions, 99 deletions
diff --git a/kernel/module.c b/kernel/module.c index dc582749fa13..f5a3b1e8ec51 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -378,23 +378,21 @@ static bool check_symbol(const struct symsearch *syms, | |||
| 378 | if (syms->licence == GPL_ONLY) | 378 | if (syms->licence == GPL_ONLY) |
| 379 | return false; | 379 | return false; |
| 380 | if (syms->licence == WILL_BE_GPL_ONLY && fsa->warn) { | 380 | if (syms->licence == WILL_BE_GPL_ONLY && fsa->warn) { |
| 381 | printk(KERN_WARNING "Symbol %s is being used " | 381 | pr_warn("Symbol %s is being used by a non-GPL module, " |
| 382 | "by a non-GPL module, which will not " | 382 | "which will not be allowed in the future\n", |
| 383 | "be allowed in the future\n", fsa->name); | 383 | fsa->name); |
| 384 | } | 384 | } |
| 385 | } | 385 | } |
| 386 | 386 | ||
| 387 | #ifdef CONFIG_UNUSED_SYMBOLS | 387 | #ifdef CONFIG_UNUSED_SYMBOLS |
| 388 | if (syms->unused && fsa->warn) { | 388 | if (syms->unused && fsa->warn) { |
| 389 | printk(KERN_WARNING "Symbol %s is marked as UNUSED, " | 389 | pr_warn("Symbol %s is marked as UNUSED, however this module is " |
| 390 | "however this module is using it.\n", fsa->name); | 390 | "using it.\n", fsa->name); |
| 391 | printk(KERN_WARNING | 391 | pr_warn("This symbol will go away in the future.\n"); |
| 392 | "This symbol will go away in the future.\n"); | 392 | pr_warn("Please evalute if this is the right api to use and if " |
| 393 | printk(KERN_WARNING | 393 | "it really is, submit a report the linux kernel " |
| 394 | "Please evalute if this is the right api to use and if " | 394 | "mailinglist together with submitting your code for " |
| 395 | "it really is, submit a report the linux kernel " | 395 | "inclusion.\n"); |
| 396 | "mailinglist together with submitting your code for " | ||
| 397 | "inclusion.\n"); | ||
| 398 | } | 396 | } |
| 399 | #endif | 397 | #endif |
| 400 | 398 | ||
| @@ -492,16 +490,15 @@ static int percpu_modalloc(struct module *mod, struct load_info *info) | |||
| 492 | return 0; | 490 | return 0; |
| 493 | 491 | ||
| 494 | if (align > PAGE_SIZE) { | 492 | if (align > PAGE_SIZE) { |
| 495 | printk(KERN_WARNING "%s: per-cpu alignment %li > %li\n", | 493 | pr_warn("%s: per-cpu alignment %li > %li\n", |
| 496 | mod->name, align, PAGE_SIZE); | 494 | mod->name, align, PAGE_SIZE); |
| 497 | align = PAGE_SIZE; | 495 | align = PAGE_SIZE; |
| 498 | } | 496 | } |
| 499 | 497 | ||
| 500 | mod->percpu = __alloc_reserved_percpu(pcpusec->sh_size, align); | 498 | mod->percpu = __alloc_reserved_percpu(pcpusec->sh_size, align); |
| 501 | if (!mod->percpu) { | 499 | if (!mod->percpu) { |
| 502 | printk(KERN_WARNING | 500 | pr_warn("%s: Could not allocate %lu bytes percpu data\n", |
| 503 | "%s: Could not allocate %lu bytes percpu data\n", | 501 | mod->name, (unsigned long)pcpusec->sh_size); |
| 504 | mod->name, (unsigned long)pcpusec->sh_size); | ||
| 505 | return -ENOMEM; | 502 | return -ENOMEM; |
| 506 | } | 503 | } |
| 507 | mod->percpu_size = pcpusec->sh_size; | 504 | mod->percpu_size = pcpusec->sh_size; |
| @@ -644,8 +641,6 @@ static int module_unload_init(struct module *mod) | |||
| 644 | 641 | ||
| 645 | /* Hold reference count during initialization. */ | 642 | /* Hold reference count during initialization. */ |
| 646 | __this_cpu_write(mod->refptr->incs, 1); | 643 | __this_cpu_write(mod->refptr->incs, 1); |
| 647 | /* Backwards compatibility macros put refcount during init. */ | ||
| 648 | mod->waiter = current; | ||
| 649 | 644 | ||
| 650 | return 0; | 645 | return 0; |
| 651 | } | 646 | } |
| @@ -679,7 +674,7 @@ static int add_module_usage(struct module *a, struct module *b) | |||
| 679 | pr_debug("Allocating new usage for %s.\n", a->name); | 674 | pr_debug("Allocating new usage for %s.\n", a->name); |
| 680 | use = kmalloc(sizeof(*use), GFP_ATOMIC); | 675 | use = kmalloc(sizeof(*use), GFP_ATOMIC); |
| 681 | if (!use) { | 676 | if (!use) { |
| 682 | printk(KERN_WARNING "%s: out of memory loading\n", a->name); | 677 | pr_warn("%s: out of memory loading\n", a->name); |
| 683 | return -ENOMEM; | 678 | return -ENOMEM; |
| 684 | } | 679 | } |
| 685 | 680 | ||
| @@ -771,16 +766,9 @@ static int __try_stop_module(void *_sref) | |||
| 771 | 766 | ||
| 772 | static int try_stop_module(struct module *mod, int flags, int *forced) | 767 | static int try_stop_module(struct module *mod, int flags, int *forced) |
| 773 | { | 768 | { |
| 774 | if (flags & O_NONBLOCK) { | 769 | struct stopref sref = { mod, flags, forced }; |
| 775 | struct stopref sref = { mod, flags, forced }; | ||
| 776 | 770 | ||
| 777 | return stop_machine(__try_stop_module, &sref, NULL); | 771 | return stop_machine(__try_stop_module, &sref, NULL); |
| 778 | } else { | ||
| 779 | /* We don't need to stop the machine for this. */ | ||
| 780 | mod->state = MODULE_STATE_GOING; | ||
| 781 | synchronize_sched(); | ||
| 782 | return 0; | ||
| 783 | } | ||
| 784 | } | 772 | } |
| 785 | 773 | ||
| 786 | unsigned long module_refcount(struct module *mod) | 774 | unsigned long module_refcount(struct module *mod) |
| @@ -813,21 +801,6 @@ EXPORT_SYMBOL(module_refcount); | |||
| 813 | /* This exists whether we can unload or not */ | 801 | /* This exists whether we can unload or not */ |
| 814 | static void free_module(struct module *mod); | 802 | static void free_module(struct module *mod); |
| 815 | 803 | ||
| 816 | static void wait_for_zero_refcount(struct module *mod) | ||
| 817 | { | ||
| 818 | /* Since we might sleep for some time, release the mutex first */ | ||
| 819 | mutex_unlock(&module_mutex); | ||
| 820 | for (;;) { | ||
| 821 | pr_debug("Looking at refcount...\n"); | ||
| 822 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
| 823 | if (module_refcount(mod) == 0) | ||
| 824 | break; | ||
| 825 | schedule(); | ||
| 826 | } | ||
| 827 | current->state = TASK_RUNNING; | ||
| 828 | mutex_lock(&module_mutex); | ||
| 829 | } | ||
| 830 | |||
| 831 | SYSCALL_DEFINE2(delete_module, const char __user *, name_user, | 804 | SYSCALL_DEFINE2(delete_module, const char __user *, name_user, |
| 832 | unsigned int, flags) | 805 | unsigned int, flags) |
| 833 | { | 806 | { |
| @@ -842,6 +815,11 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, | |||
| 842 | return -EFAULT; | 815 | return -EFAULT; |
| 843 | name[MODULE_NAME_LEN-1] = '\0'; | 816 | name[MODULE_NAME_LEN-1] = '\0'; |
| 844 | 817 | ||
| 818 | if (!(flags & O_NONBLOCK)) { | ||
| 819 | printk(KERN_WARNING | ||
| 820 | "waiting module removal not supported: please upgrade"); | ||
| 821 | } | ||
| 822 | |||
| 845 | if (mutex_lock_interruptible(&module_mutex) != 0) | 823 | if (mutex_lock_interruptible(&module_mutex) != 0) |
| 846 | return -EINTR; | 824 | return -EINTR; |
| 847 | 825 | ||
| @@ -859,8 +837,7 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, | |||
| 859 | 837 | ||
| 860 | /* Doing init or already dying? */ | 838 | /* Doing init or already dying? */ |
| 861 | if (mod->state != MODULE_STATE_LIVE) { | 839 | if (mod->state != MODULE_STATE_LIVE) { |
| 862 | /* FIXME: if (force), slam module count and wake up | 840 | /* FIXME: if (force), slam module count damn the torpedoes */ |
| 863 | waiter --RR */ | ||
| 864 | pr_debug("%s already dying\n", mod->name); | 841 | pr_debug("%s already dying\n", mod->name); |
| 865 | ret = -EBUSY; | 842 | ret = -EBUSY; |
| 866 | goto out; | 843 | goto out; |
| @@ -876,18 +853,11 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, | |||
| 876 | } | 853 | } |
| 877 | } | 854 | } |
| 878 | 855 | ||
| 879 | /* Set this up before setting mod->state */ | ||
| 880 | mod->waiter = current; | ||
| 881 | |||
| 882 | /* Stop the machine so refcounts can't move and disable module. */ | 856 | /* Stop the machine so refcounts can't move and disable module. */ |
| 883 | ret = try_stop_module(mod, flags, &forced); | 857 | ret = try_stop_module(mod, flags, &forced); |
| 884 | if (ret != 0) | 858 | if (ret != 0) |
| 885 | goto out; | 859 | goto out; |
| 886 | 860 | ||
| 887 | /* Never wait if forced. */ | ||
| 888 | if (!forced && module_refcount(mod) != 0) | ||
| 889 | wait_for_zero_refcount(mod); | ||
| 890 | |||
| 891 | mutex_unlock(&module_mutex); | 861 | mutex_unlock(&module_mutex); |
| 892 | /* Final destruction now no one is using it. */ | 862 | /* Final destruction now no one is using it. */ |
| 893 | if (mod->exit != NULL) | 863 | if (mod->exit != NULL) |
| @@ -1005,9 +975,6 @@ void module_put(struct module *module) | |||
| 1005 | __this_cpu_inc(module->refptr->decs); | 975 | __this_cpu_inc(module->refptr->decs); |
| 1006 | 976 | ||
| 1007 | trace_module_put(module, _RET_IP_); | 977 | trace_module_put(module, _RET_IP_); |
| 1008 | /* Maybe they're waiting for us to drop reference? */ | ||
| 1009 | if (unlikely(!module_is_live(module))) | ||
| 1010 | wake_up_process(module->waiter); | ||
| 1011 | preempt_enable(); | 978 | preempt_enable(); |
| 1012 | } | 979 | } |
| 1013 | } | 980 | } |
| @@ -1145,8 +1112,7 @@ static int try_to_force_load(struct module *mod, const char *reason) | |||
| 1145 | { | 1112 | { |
| 1146 | #ifdef CONFIG_MODULE_FORCE_LOAD | 1113 | #ifdef CONFIG_MODULE_FORCE_LOAD |
| 1147 | if (!test_taint(TAINT_FORCED_MODULE)) | 1114 | if (!test_taint(TAINT_FORCED_MODULE)) |
| 1148 | printk(KERN_WARNING "%s: %s: kernel tainted.\n", | 1115 | pr_warn("%s: %s: kernel tainted.\n", mod->name, reason); |
| 1149 | mod->name, reason); | ||
| 1150 | add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_NOW_UNRELIABLE); | 1116 | add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_NOW_UNRELIABLE); |
| 1151 | return 0; | 1117 | return 0; |
| 1152 | #else | 1118 | #else |
| @@ -1199,8 +1165,7 @@ static int check_version(Elf_Shdr *sechdrs, | |||
| 1199 | goto bad_version; | 1165 | goto bad_version; |
| 1200 | } | 1166 | } |
| 1201 | 1167 | ||
| 1202 | printk(KERN_WARNING "%s: no symbol version for %s\n", | 1168 | pr_warn("%s: no symbol version for %s\n", mod->name, symname); |
| 1203 | mod->name, symname); | ||
| 1204 | return 0; | 1169 | return 0; |
| 1205 | 1170 | ||
| 1206 | bad_version: | 1171 | bad_version: |
| @@ -1309,8 +1274,8 @@ resolve_symbol_wait(struct module *mod, | |||
| 1309 | !IS_ERR(ksym = resolve_symbol(mod, info, name, owner)) | 1274 | !IS_ERR(ksym = resolve_symbol(mod, info, name, owner)) |
| 1310 | || PTR_ERR(ksym) != -EBUSY, | 1275 | || PTR_ERR(ksym) != -EBUSY, |
| 1311 | 30 * HZ) <= 0) { | 1276 | 30 * HZ) <= 0) { |
| 1312 | printk(KERN_WARNING "%s: gave up waiting for init of module %s.\n", | 1277 | pr_warn("%s: gave up waiting for init of module %s.\n", |
| 1313 | mod->name, owner); | 1278 | mod->name, owner); |
| 1314 | } | 1279 | } |
| 1315 | return ksym; | 1280 | return ksym; |
| 1316 | } | 1281 | } |
| @@ -1626,15 +1591,14 @@ static int mod_sysfs_init(struct module *mod) | |||
| 1626 | struct kobject *kobj; | 1591 | struct kobject *kobj; |
| 1627 | 1592 | ||
| 1628 | if (!module_sysfs_initialized) { | 1593 | if (!module_sysfs_initialized) { |
| 1629 | printk(KERN_ERR "%s: module sysfs not initialized\n", | 1594 | pr_err("%s: module sysfs not initialized\n", mod->name); |
| 1630 | mod->name); | ||
| 1631 | err = -EINVAL; | 1595 | err = -EINVAL; |
| 1632 | goto out; | 1596 | goto out; |
| 1633 | } | 1597 | } |
| 1634 | 1598 | ||
| 1635 | kobj = kset_find_obj(module_kset, mod->name); | 1599 | kobj = kset_find_obj(module_kset, mod->name); |
| 1636 | if (kobj) { | 1600 | if (kobj) { |
| 1637 | printk(KERN_ERR "%s: module is already loaded\n", mod->name); | 1601 | pr_err("%s: module is already loaded\n", mod->name); |
| 1638 | kobject_put(kobj); | 1602 | kobject_put(kobj); |
| 1639 | err = -EINVAL; | 1603 | err = -EINVAL; |
| 1640 | goto out; | 1604 | goto out; |
| @@ -1961,8 +1925,7 @@ static int verify_export_symbols(struct module *mod) | |||
| 1961 | for (i = 0; i < ARRAY_SIZE(arr); i++) { | 1925 | for (i = 0; i < ARRAY_SIZE(arr); i++) { |
| 1962 | for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) { | 1926 | for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) { |
| 1963 | if (find_symbol(s->name, &owner, NULL, true, false)) { | 1927 | if (find_symbol(s->name, &owner, NULL, true, false)) { |
| 1964 | printk(KERN_ERR | 1928 | pr_err("%s: exports duplicate symbol %s" |
| 1965 | "%s: exports duplicate symbol %s" | ||
| 1966 | " (owned by %s)\n", | 1929 | " (owned by %s)\n", |
| 1967 | mod->name, s->name, module_name(owner)); | 1930 | mod->name, s->name, module_name(owner)); |
| 1968 | return -ENOEXEC; | 1931 | return -ENOEXEC; |
| @@ -2013,8 +1976,8 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) | |||
| 2013 | if (!ksym && ELF_ST_BIND(sym[i].st_info) == STB_WEAK) | 1976 | if (!ksym && ELF_ST_BIND(sym[i].st_info) == STB_WEAK) |
| 2014 | break; | 1977 | break; |
| 2015 | 1978 | ||
| 2016 | printk(KERN_WARNING "%s: Unknown symbol %s (err %li)\n", | 1979 | pr_warn("%s: Unknown symbol %s (err %li)\n", |
| 2017 | mod->name, name, PTR_ERR(ksym)); | 1980 | mod->name, name, PTR_ERR(ksym)); |
| 2018 | ret = PTR_ERR(ksym) ?: -ENOENT; | 1981 | ret = PTR_ERR(ksym) ?: -ENOENT; |
| 2019 | break; | 1982 | break; |
| 2020 | 1983 | ||
| @@ -2168,8 +2131,8 @@ static void set_license(struct module *mod, const char *license) | |||
| 2168 | 2131 | ||
| 2169 | if (!license_is_gpl_compatible(license)) { | 2132 | if (!license_is_gpl_compatible(license)) { |
| 2170 | if (!test_taint(TAINT_PROPRIETARY_MODULE)) | 2133 | if (!test_taint(TAINT_PROPRIETARY_MODULE)) |
| 2171 | printk(KERN_WARNING "%s: module license '%s' taints " | 2134 | pr_warn("%s: module license '%s' taints kernel.\n", |
| 2172 | "kernel.\n", mod->name, license); | 2135 | mod->name, license); |
| 2173 | add_taint_module(mod, TAINT_PROPRIETARY_MODULE, | 2136 | add_taint_module(mod, TAINT_PROPRIETARY_MODULE, |
| 2174 | LOCKDEP_NOW_UNRELIABLE); | 2137 | LOCKDEP_NOW_UNRELIABLE); |
| 2175 | } | 2138 | } |
| @@ -2405,8 +2368,8 @@ static void dynamic_debug_setup(struct _ddebug *debug, unsigned int num) | |||
| 2405 | return; | 2368 | return; |
| 2406 | #ifdef CONFIG_DYNAMIC_DEBUG | 2369 | #ifdef CONFIG_DYNAMIC_DEBUG |
| 2407 | if (ddebug_add_module(debug, num, debug->modname)) | 2370 | if (ddebug_add_module(debug, num, debug->modname)) |
| 2408 | printk(KERN_ERR "dynamic debug error adding module: %s\n", | 2371 | pr_err("dynamic debug error adding module: %s\n", |
| 2409 | debug->modname); | 2372 | debug->modname); |
| 2410 | #endif | 2373 | #endif |
| 2411 | } | 2374 | } |
| 2412 | 2375 | ||
| @@ -2619,8 +2582,7 @@ static int rewrite_section_headers(struct load_info *info, int flags) | |||
| 2619 | Elf_Shdr *shdr = &info->sechdrs[i]; | 2582 | Elf_Shdr *shdr = &info->sechdrs[i]; |
| 2620 | if (shdr->sh_type != SHT_NOBITS | 2583 | if (shdr->sh_type != SHT_NOBITS |
| 2621 | && info->len < shdr->sh_offset + shdr->sh_size) { | 2584 | && info->len < shdr->sh_offset + shdr->sh_size) { |
| 2622 | printk(KERN_ERR "Module len %lu truncated\n", | 2585 | pr_err("Module len %lu truncated\n", info->len); |
| 2623 | info->len); | ||
| 2624 | return -ENOEXEC; | 2586 | return -ENOEXEC; |
| 2625 | } | 2587 | } |
| 2626 | 2588 | ||
| @@ -2682,15 +2644,14 @@ static struct module *setup_load_info(struct load_info *info, int flags) | |||
| 2682 | 2644 | ||
| 2683 | info->index.mod = find_sec(info, ".gnu.linkonce.this_module"); | 2645 | info->index.mod = find_sec(info, ".gnu.linkonce.this_module"); |
| 2684 | if (!info->index.mod) { | 2646 | if (!info->index.mod) { |
| 2685 | printk(KERN_WARNING "No module found in object\n"); | 2647 | pr_warn("No module found in object\n"); |
| 2686 | return ERR_PTR(-ENOEXEC); | 2648 | return ERR_PTR(-ENOEXEC); |
| 2687 | } | 2649 | } |
| 2688 | /* This is temporary: point mod into copy of data. */ | 2650 | /* This is temporary: point mod into copy of data. */ |
| 2689 | mod = (void *)info->sechdrs[info->index.mod].sh_addr; | 2651 | mod = (void *)info->sechdrs[info->index.mod].sh_addr; |
| 2690 | 2652 | ||
| 2691 | if (info->index.sym == 0) { | 2653 | if (info->index.sym == 0) { |
| 2692 | printk(KERN_WARNING "%s: module has no symbols (stripped?)\n", | 2654 | pr_warn("%s: module has no symbols (stripped?)\n", mod->name); |
| 2693 | mod->name); | ||
| 2694 | return ERR_PTR(-ENOEXEC); | 2655 | return ERR_PTR(-ENOEXEC); |
| 2695 | } | 2656 | } |
| 2696 | 2657 | ||
| @@ -2717,7 +2678,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) | |||
| 2717 | if (err) | 2678 | if (err) |
| 2718 | return err; | 2679 | return err; |
| 2719 | } else if (!same_magic(modmagic, vermagic, info->index.vers)) { | 2680 | } else if (!same_magic(modmagic, vermagic, info->index.vers)) { |
| 2720 | printk(KERN_ERR "%s: version magic '%s' should be '%s'\n", | 2681 | pr_err("%s: version magic '%s' should be '%s'\n", |
| 2721 | mod->name, modmagic, vermagic); | 2682 | mod->name, modmagic, vermagic); |
| 2722 | return -ENOEXEC; | 2683 | return -ENOEXEC; |
| 2723 | } | 2684 | } |
| @@ -2727,9 +2688,8 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) | |||
| 2727 | 2688 | ||
| 2728 | if (get_modinfo(info, "staging")) { | 2689 | if (get_modinfo(info, "staging")) { |
| 2729 | add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK); | 2690 | add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK); |
| 2730 | printk(KERN_WARNING "%s: module is from the staging directory," | 2691 | pr_warn("%s: module is from the staging directory, the quality " |
| 2731 | " the quality is unknown, you have been warned.\n", | 2692 | "is unknown, you have been warned.\n", mod->name); |
| 2732 | mod->name); | ||
| 2733 | } | 2693 | } |
| 2734 | 2694 | ||
| 2735 | /* Set up license info based on the info section */ | 2695 | /* Set up license info based on the info section */ |
| @@ -2738,7 +2698,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) | |||
| 2738 | return 0; | 2698 | return 0; |
| 2739 | } | 2699 | } |
| 2740 | 2700 | ||
| 2741 | static void find_module_sections(struct module *mod, struct load_info *info) | 2701 | static int find_module_sections(struct module *mod, struct load_info *info) |
| 2742 | { | 2702 | { |
| 2743 | mod->kp = section_objs(info, "__param", | 2703 | mod->kp = section_objs(info, "__param", |
| 2744 | sizeof(*mod->kp), &mod->num_kp); | 2704 | sizeof(*mod->kp), &mod->num_kp); |
| @@ -2768,6 +2728,18 @@ static void find_module_sections(struct module *mod, struct load_info *info) | |||
| 2768 | #ifdef CONFIG_CONSTRUCTORS | 2728 | #ifdef CONFIG_CONSTRUCTORS |
| 2769 | mod->ctors = section_objs(info, ".ctors", | 2729 | mod->ctors = section_objs(info, ".ctors", |
| 2770 | sizeof(*mod->ctors), &mod->num_ctors); | 2730 | sizeof(*mod->ctors), &mod->num_ctors); |
| 2731 | if (!mod->ctors) | ||
| 2732 | mod->ctors = section_objs(info, ".init_array", | ||
| 2733 | sizeof(*mod->ctors), &mod->num_ctors); | ||
| 2734 | else if (find_sec(info, ".init_array")) { | ||
| 2735 | /* | ||
| 2736 | * This shouldn't happen with same compiler and binutils | ||
| 2737 | * building all parts of the module. | ||
| 2738 | */ | ||
| 2739 | printk(KERN_WARNING "%s: has both .ctors and .init_array.\n", | ||
| 2740 | mod->name); | ||
| 2741 | return -EINVAL; | ||
| 2742 | } | ||
| 2771 | #endif | 2743 | #endif |
| 2772 | 2744 | ||
| 2773 | #ifdef CONFIG_TRACEPOINTS | 2745 | #ifdef CONFIG_TRACEPOINTS |
| @@ -2801,11 +2773,12 @@ static void find_module_sections(struct module *mod, struct load_info *info) | |||
| 2801 | sizeof(*mod->extable), &mod->num_exentries); | 2773 | sizeof(*mod->extable), &mod->num_exentries); |
| 2802 | 2774 | ||
| 2803 | if (section_addr(info, "__obsparm")) | 2775 | if (section_addr(info, "__obsparm")) |
| 2804 | printk(KERN_WARNING "%s: Ignoring obsolete parameters\n", | 2776 | pr_warn("%s: Ignoring obsolete parameters\n", mod->name); |
| 2805 | mod->name); | ||
| 2806 | 2777 | ||
| 2807 | info->debug = section_objs(info, "__verbose", | 2778 | info->debug = section_objs(info, "__verbose", |
| 2808 | sizeof(*info->debug), &info->num_debug); | 2779 | sizeof(*info->debug), &info->num_debug); |
| 2780 | |||
| 2781 | return 0; | ||
| 2809 | } | 2782 | } |
| 2810 | 2783 | ||
| 2811 | static int move_module(struct module *mod, struct load_info *info) | 2784 | static int move_module(struct module *mod, struct load_info *info) |
| @@ -3078,11 +3051,10 @@ static int do_init_module(struct module *mod) | |||
| 3078 | return ret; | 3051 | return ret; |
| 3079 | } | 3052 | } |
| 3080 | if (ret > 0) { | 3053 | if (ret > 0) { |
| 3081 | printk(KERN_WARNING | 3054 | pr_warn("%s: '%s'->init suspiciously returned %d, it should " |
| 3082 | "%s: '%s'->init suspiciously returned %d, it should follow 0/-E convention\n" | 3055 | "follow 0/-E convention\n" |
| 3083 | "%s: loading module anyway...\n", | 3056 | "%s: loading module anyway...\n", |
| 3084 | __func__, mod->name, ret, | 3057 | __func__, mod->name, ret, __func__); |
| 3085 | __func__); | ||
| 3086 | dump_stack(); | 3058 | dump_stack(); |
| 3087 | } | 3059 | } |
| 3088 | 3060 | ||
| @@ -3205,10 +3177,8 @@ static int unknown_module_param_cb(char *param, char *val, const char *modname) | |||
| 3205 | { | 3177 | { |
| 3206 | /* Check for magic 'dyndbg' arg */ | 3178 | /* Check for magic 'dyndbg' arg */ |
| 3207 | int ret = ddebug_dyndbg_module_param_cb(param, val, modname); | 3179 | int ret = ddebug_dyndbg_module_param_cb(param, val, modname); |
| 3208 | if (ret != 0) { | 3180 | if (ret != 0) |
| 3209 | printk(KERN_WARNING "%s: unknown parameter '%s' ignored\n", | 3181 | pr_warn("%s: unknown parameter '%s' ignored\n", modname, param); |
| 3210 | modname, param); | ||
| 3211 | } | ||
| 3212 | return 0; | 3182 | return 0; |
| 3213 | } | 3183 | } |
| 3214 | 3184 | ||
| @@ -3243,10 +3213,9 @@ static int load_module(struct load_info *info, const char __user *uargs, | |||
| 3243 | #ifdef CONFIG_MODULE_SIG | 3213 | #ifdef CONFIG_MODULE_SIG |
| 3244 | mod->sig_ok = info->sig_ok; | 3214 | mod->sig_ok = info->sig_ok; |
| 3245 | if (!mod->sig_ok) { | 3215 | if (!mod->sig_ok) { |
| 3246 | printk_once(KERN_NOTICE | 3216 | pr_notice_once("%s: module verification failed: signature " |
| 3247 | "%s: module verification failed: signature and/or" | 3217 | "and/or required key missing - tainting " |
| 3248 | " required key missing - tainting kernel\n", | 3218 | "kernel\n", mod->name); |
| 3249 | mod->name); | ||
| 3250 | add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_STILL_OK); | 3219 | add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_STILL_OK); |
| 3251 | } | 3220 | } |
| 3252 | #endif | 3221 | #endif |
| @@ -3263,7 +3232,9 @@ static int load_module(struct load_info *info, const char __user *uargs, | |||
| 3263 | 3232 | ||
| 3264 | /* Now we've got everything in the final locations, we can | 3233 | /* Now we've got everything in the final locations, we can |
| 3265 | * find optional sections. */ | 3234 | * find optional sections. */ |
| 3266 | find_module_sections(mod, info); | 3235 | err = find_module_sections(mod, info); |
| 3236 | if (err) | ||
| 3237 | goto free_unload; | ||
| 3267 | 3238 | ||
| 3268 | err = check_module_license_and_versions(mod); | 3239 | err = check_module_license_and_versions(mod); |
| 3269 | if (err) | 3240 | if (err) |
