1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/export.h>
20#include <linux/moduleloader.h>
21#include <linux/ftrace_event.h>
22#include <linux/init.h>
23#include <linux/kallsyms.h>
24#include <linux/fs.h>
25#include <linux/sysfs.h>
26#include <linux/kernel.h>
27#include <linux/slab.h>
28#include <linux/vmalloc.h>
29#include <linux/elf.h>
30#include <linux/proc_fs.h>
31#include <linux/seq_file.h>
32#include <linux/syscalls.h>
33#include <linux/fcntl.h>
34#include <linux/rcupdate.h>
35#include <linux/capability.h>
36#include <linux/cpu.h>
37#include <linux/moduleparam.h>
38#include <linux/errno.h>
39#include <linux/err.h>
40#include <linux/vermagic.h>
41#include <linux/notifier.h>
42#include <linux/sched.h>
43#include <linux/stop_machine.h>
44#include <linux/device.h>
45#include <linux/string.h>
46#include <linux/mutex.h>
47#include <linux/rculist.h>
48#include <asm/uaccess.h>
49#include <asm/cacheflush.h>
50#include <asm/mmu_context.h>
51#include <linux/license.h>
52#include <asm/sections.h>
53#include <linux/tracepoint.h>
54#include <linux/ftrace.h>
55#include <linux/async.h>
56#include <linux/percpu.h>
57#include <linux/kmemleak.h>
58#include <linux/jump_label.h>
59#include <linux/pfn.h>
60#include <linux/bsearch.h>
61#include <linux/fips.h>
62#include "module-internal.h"
63
64#define CREATE_TRACE_POINTS
65#include <trace/events/module.h>
66
67#ifndef ARCH_SHF_SMALL
68#define ARCH_SHF_SMALL 0
69#endif
70
71
72
73
74
75
76#ifdef CONFIG_DEBUG_SET_MODULE_RONX
77# define debug_align(X) ALIGN(X, PAGE_SIZE)
78#else
79# define debug_align(X) (X)
80#endif
81
82
83
84
85
86#define MOD_NUMBER_OF_PAGES(BASE, SIZE) (((SIZE) > 0) ? \
87 (PFN_DOWN((unsigned long)(BASE) + (SIZE) - 1) - \
88 PFN_DOWN((unsigned long)BASE) + 1) \
89 : (0UL))
90
91
92#define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
93
94
95
96
97
98
99
100DEFINE_MUTEX(module_mutex);
101EXPORT_SYMBOL_GPL(module_mutex);
102static LIST_HEAD(modules);
103#ifdef CONFIG_KGDB_KDB
104struct list_head *kdb_modules = &modules;
105#endif
106
107#ifdef CONFIG_MODULE_SIG
108#ifdef CONFIG_MODULE_SIG_FORCE
109static bool sig_enforce = true;
110#else
111static bool sig_enforce = false;
112
113static int param_set_bool_enable_only(const char *val,
114 const struct kernel_param *kp)
115{
116 int err;
117 bool test;
118 struct kernel_param dummy_kp = *kp;
119
120 dummy_kp.arg = &test;
121
122 err = param_set_bool(val, &dummy_kp);
123 if (err)
124 return err;
125
126
127 if (!test && sig_enforce)
128 return -EROFS;
129
130 if (test)
131 sig_enforce = true;
132 return 0;
133}
134
135static const struct kernel_param_ops param_ops_bool_enable_only = {
136 .set = param_set_bool_enable_only,
137 .get = param_get_bool,
138};
139#define param_check_bool_enable_only param_check_bool
140
141module_param(sig_enforce, bool_enable_only, 0644);
142#endif
143#endif
144
145
146int modules_disabled = 0;
147core_param(nomodule, modules_disabled, bint, 0);
148
149
150static DECLARE_WAIT_QUEUE_HEAD(module_wq);
151
152static BLOCKING_NOTIFIER_HEAD(module_notify_list);
153
154
155
156static unsigned long module_addr_min = -1UL, module_addr_max = 0;
157
158int register_module_notifier(struct notifier_block * nb)
159{
160 return blocking_notifier_chain_register(&module_notify_list, nb);
161}
162EXPORT_SYMBOL(register_module_notifier);
163
164int unregister_module_notifier(struct notifier_block * nb)
165{
166 return blocking_notifier_chain_unregister(&module_notify_list, nb);
167}
168EXPORT_SYMBOL(unregister_module_notifier);
169
170struct load_info {
171 Elf_Ehdr *hdr;
172 unsigned long len;
173 Elf_Shdr *sechdrs;
174 char *secstrings, *strtab;
175 unsigned long symoffs, stroffs;
176 struct _ddebug *debug;
177 unsigned int num_debug;
178 bool sig_ok;
179 struct {
180 unsigned int sym, str, mod, vers, info, pcpu;
181 } index;
182};
183
184
185
186static inline int strong_try_module_get(struct module *mod)
187{
188 BUG_ON(mod && mod->state == MODULE_STATE_UNFORMED);
189 if (mod && mod->state == MODULE_STATE_COMING)
190 return -EBUSY;
191 if (try_module_get(mod))
192 return 0;
193 else
194 return -ENOENT;
195}
196
197static inline void add_taint_module(struct module *mod, unsigned flag)
198{
199 add_taint(flag);
200 mod->taints |= (1U << flag);
201}
202
203
204
205
206
207void __module_put_and_exit(struct module *mod, long code)
208{
209 module_put(mod);
210 do_exit(code);
211}
212EXPORT_SYMBOL(__module_put_and_exit);
213
214
215static unsigned int find_sec(const struct load_info *info, const char *name)
216{
217 unsigned int i;
218
219 for (i = 1; i < info->hdr->e_shnum; i++) {
220 Elf_Shdr *shdr = &info->sechdrs[i];
221
222 if ((shdr->sh_flags & SHF_ALLOC)
223 && strcmp(info->secstrings + shdr->sh_name, name) == 0)
224 return i;
225 }
226 return 0;
227}
228
229
230static void *section_addr(const struct load_info *info, const char *name)
231{
232
233 return (void *)info->sechdrs[find_sec(info, name)].sh_addr;
234}
235
236
237static void *section_objs(const struct load_info *info,
238 const char *name,
239 size_t object_size,
240 unsigned int *num)
241{
242 unsigned int sec = find_sec(info, name);
243
244
245 *num = info->sechdrs[sec].sh_size / object_size;
246 return (void *)info->sechdrs[sec].sh_addr;
247}
248
249
250extern const struct kernel_symbol __start___ksymtab[];
251extern const struct kernel_symbol __stop___ksymtab[];
252extern const struct kernel_symbol __start___ksymtab_gpl[];
253extern const struct kernel_symbol __stop___ksymtab_gpl[];
254extern const struct kernel_symbol __start___ksymtab_gpl_future[];
255extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
256extern const unsigned long __start___kcrctab[];
257extern const unsigned long __start___kcrctab_gpl[];
258extern const unsigned long __start___kcrctab_gpl_future[];
259#ifdef CONFIG_UNUSED_SYMBOLS
260extern const struct kernel_symbol __start___ksymtab_unused[];
261extern const struct kernel_symbol __stop___ksymtab_unused[];
262extern const struct kernel_symbol __start___ksymtab_unused_gpl[];
263extern const struct kernel_symbol __stop___ksymtab_unused_gpl[];
264extern const unsigned long __start___kcrctab_unused[];
265extern const unsigned long __start___kcrctab_unused_gpl[];
266#endif
267
268#ifndef CONFIG_MODVERSIONS
269#define symversion(base, idx) NULL
270#else
271#define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
272#endif
273
274static bool each_symbol_in_section(const struct symsearch *arr,
275 unsigned int arrsize,
276 struct module *owner,
277 bool (*fn)(const struct symsearch *syms,
278 struct module *owner,
279 void *data),
280 void *data)
281{
282 unsigned int j;
283
284 for (j = 0; j < arrsize; j++) {
285 if (fn(&arr[j], owner, data))
286 return true;
287 }
288
289 return false;
290}
291
292
293bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
294 struct module *owner,
295 void *data),
296 void *data)
297{
298 struct module *mod;
299 static const struct symsearch arr[] = {
300 { __start___ksymtab, __stop___ksymtab, __start___kcrctab,
301 NOT_GPL_ONLY, false },
302 { __start___ksymtab_gpl, __stop___ksymtab_gpl,
303 __start___kcrctab_gpl,
304 GPL_ONLY, false },
305 { __start___ksymtab_gpl_future, __stop___ksymtab_gpl_future,
306 __start___kcrctab_gpl_future,
307 WILL_BE_GPL_ONLY, false },
308#ifdef CONFIG_UNUSED_SYMBOLS
309 { __start___ksymtab_unused, __stop___ksymtab_unused,
310 __start___kcrctab_unused,
311 NOT_GPL_ONLY, true },
312 { __start___ksymtab_unused_gpl, __stop___ksymtab_unused_gpl,
313 __start___kcrctab_unused_gpl,
314 GPL_ONLY, true },
315#endif
316 };
317
318 if (each_symbol_in_section(arr, ARRAY_SIZE(arr), NULL, fn, data))
319 return true;
320
321 list_for_each_entry_rcu(mod, &modules, list) {
322 struct symsearch arr[] = {
323 { mod->syms, mod->syms + mod->num_syms, mod->crcs,
324 NOT_GPL_ONLY, false },
325 { mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms,
326 mod->gpl_crcs,
327 GPL_ONLY, false },
328 { mod->gpl_future_syms,
329 mod->gpl_future_syms + mod->num_gpl_future_syms,
330 mod->gpl_future_crcs,
331 WILL_BE_GPL_ONLY, false },
332#ifdef CONFIG_UNUSED_SYMBOLS
333 { mod->unused_syms,
334 mod->unused_syms + mod->num_unused_syms,
335 mod->unused_crcs,
336 NOT_GPL_ONLY, true },
337 { mod->unused_gpl_syms,
338 mod->unused_gpl_syms + mod->num_unused_gpl_syms,
339 mod->unused_gpl_crcs,
340 GPL_ONLY, true },
341#endif
342 };
343
344 if (mod->state == MODULE_STATE_UNFORMED)
345 continue;
346
347 if (each_symbol_in_section(arr, ARRAY_SIZE(arr), mod, fn, data))
348 return true;
349 }
350 return false;
351}
352EXPORT_SYMBOL_GPL(each_symbol_section);
353
354struct find_symbol_arg {
355
356 const char *name;
357 bool gplok;
358 bool warn;
359
360
361 struct module *owner;
362 const unsigned long *crc;
363 const struct kernel_symbol *sym;
364};
365
366static bool check_symbol(const struct symsearch *syms,
367 struct module *owner,
368 unsigned int symnum, void *data)
369{
370 struct find_symbol_arg *fsa = data;
371
372 if (!fsa->gplok) {
373 if (syms->licence == GPL_ONLY)
374 return false;
375 if (syms->licence == WILL_BE_GPL_ONLY && fsa->warn) {
376 printk(KERN_WARNING "Symbol %s is being used "
377 "by a non-GPL module, which will not "
378 "be allowed in the future\n", fsa->name);
379 printk(KERN_WARNING "Please see the file "
380 "Documentation/feature-removal-schedule.txt "
381 "in the kernel source tree for more details.\n");
382 }
383 }
384
385#ifdef CONFIG_UNUSED_SYMBOLS
386 if (syms->unused && fsa->warn) {
387 printk(KERN_WARNING "Symbol %s is marked as UNUSED, "
388 "however this module is using it.\n", fsa->name);
389 printk(KERN_WARNING
390 "This symbol will go away in the future.\n");
391 printk(KERN_WARNING
392 "Please evalute if this is the right api to use and if "
393 "it really is, submit a report the linux kernel "
394 "mailinglist together with submitting your code for "
395 "inclusion.\n");
396 }
397#endif
398
399 fsa->owner = owner;
400 fsa->crc = symversion(syms->crcs, symnum);
401 fsa->sym = &syms->start[symnum];
402 return true;
403}
404
405static int cmp_name(const void *va, const void *vb)
406{
407 const char *a;
408 const struct kernel_symbol *b;
409 a = va; b = vb;
410 return strcmp(a, b->name);
411}
412
413static bool find_symbol_in_section(const struct symsearch *syms,
414 struct module *owner,
415 void *data)
416{
417 struct find_symbol_arg *fsa = data;
418 struct kernel_symbol *sym;
419
420 sym = bsearch(fsa->name, syms->start, syms->stop - syms->start,
421 sizeof(struct kernel_symbol), cmp_name);
422
423 if (sym != NULL && check_symbol(syms, owner, sym - syms->start, data))
424 return true;
425
426 return false;
427}
428
429
430
431const struct kernel_symbol *find_symbol(const char *name,
432 struct module **owner,
433 const unsigned long **crc,
434 bool gplok,
435 bool warn)
436{
437 struct find_symbol_arg fsa;
438
439 fsa.name = name;
440 fsa.gplok = gplok;
441 fsa.warn = warn;
442
443 if (each_symbol_section(find_symbol_in_section, &fsa)) {
444 if (owner)
445 *owner = fsa.owner;
446 if (crc)
447 *crc = fsa.crc;
448 return fsa.sym;
449 }
450
451 pr_debug("Failed to find symbol %s\n", name);
452 return NULL;
453}
454EXPORT_SYMBOL_GPL(find_symbol);
455
456
457static struct module *find_module_all(const char *name,
458 bool even_unformed)
459{
460 struct module *mod;
461
462 list_for_each_entry(mod, &modules, list) {
463 if (!even_unformed && mod->state == MODULE_STATE_UNFORMED)
464 continue;
465 if (strcmp(mod->name, name) == 0)
466 return mod;
467 }
468 return NULL;
469}
470
471struct module *find_module(const char *name)
472{
473 return find_module_all(name, false);
474}
475EXPORT_SYMBOL_GPL(find_module);
476
477#ifdef CONFIG_SMP
478
479static inline void __percpu *mod_percpu(struct module *mod)
480{
481 return mod->percpu;
482}
483
484static int percpu_modalloc(struct module *mod,
485 unsigned long size, unsigned long align)
486{
487 if (align > PAGE_SIZE) {
488 printk(KERN_WARNING "%s: per-cpu alignment %li > %li\n",
489 mod->name, align, PAGE_SIZE);
490 align = PAGE_SIZE;
491 }
492
493 mod->percpu = __alloc_reserved_percpu(size, align);
494 if (!mod->percpu) {
495 printk(KERN_WARNING
496 "%s: Could not allocate %lu bytes percpu data\n",
497 mod->name, size);
498 return -ENOMEM;
499 }
500 mod->percpu_size = size;
501 return 0;
502}
503
504static void percpu_modfree(struct module *mod)
505{
506 free_percpu(mod->percpu);
507}
508
509static unsigned int find_pcpusec(struct load_info *info)
510{
511 return find_sec(info, ".data..percpu");
512}
513
514static void percpu_modcopy(struct module *mod,
515 const void *from, unsigned long size)
516{
517 int cpu;
518
519 for_each_possible_cpu(cpu)
520 memcpy(per_cpu_ptr(mod->percpu, cpu), from, size);
521}
522
523
524
525
526
527
528
529
530
531
532bool is_module_percpu_address(unsigned long addr)
533{
534 struct module *mod;
535 unsigned int cpu;
536
537 preempt_disable();
538
539 list_for_each_entry_rcu(mod, &modules, list) {
540 if (mod->state == MODULE_STATE_UNFORMED)
541 continue;
542 if (!mod->percpu_size)
543 continue;
544 for_each_possible_cpu(cpu) {
545 void *start = per_cpu_ptr(mod->percpu, cpu);
546
547 if ((void *)addr >= start &&
548 (void *)addr < start + mod->percpu_size) {
549 preempt_enable();
550 return true;
551 }
552 }
553 }
554
555 preempt_enable();
556 return false;
557}
558
559#else
560
561static inline void __percpu *mod_percpu(struct module *mod)
562{
563 return NULL;
564}
565static inline int percpu_modalloc(struct module *mod,
566 unsigned long size, unsigned long align)
567{
568 return -ENOMEM;
569}
570static inline void percpu_modfree(struct module *mod)
571{
572}
573static unsigned int find_pcpusec(struct load_info *info)
574{
575 return 0;
576}
577static inline void percpu_modcopy(struct module *mod,
578 const void *from, unsigned long size)
579{
580
581 BUG_ON(size != 0);
582}
583bool is_module_percpu_address(unsigned long addr)
584{
585 return false;
586}
587
588#endif
589
590#define MODINFO_ATTR(field) \
591static void setup_modinfo_##field(struct module *mod, const char *s) \
592{ \
593 mod->field = kstrdup(s, GFP_KERNEL); \
594} \
595static ssize_t show_modinfo_##field(struct module_attribute *mattr, \
596 struct module_kobject *mk, char *buffer) \
597{ \
598 return sprintf(buffer, "%s\n", mk->mod->field); \
599} \
600static int modinfo_##field##_exists(struct module *mod) \
601{ \
602 return mod->field != NULL; \
603} \
604static void free_modinfo_##field(struct module *mod) \
605{ \
606 kfree(mod->field); \
607 mod->field = NULL; \
608} \
609static struct module_attribute modinfo_##field = { \
610 .attr = { .name = __stringify(field), .mode = 0444 }, \
611 .show = show_modinfo_##field, \
612 .setup = setup_modinfo_##field, \
613 .test = modinfo_##field##_exists, \
614 .free = free_modinfo_##field, \
615};
616
617MODINFO_ATTR(version);
618MODINFO_ATTR(srcversion);
619
620static char last_unloaded_module[MODULE_NAME_LEN+1];
621
622#ifdef CONFIG_MODULE_UNLOAD
623
624EXPORT_TRACEPOINT_SYMBOL(module_get);
625
626
627static int module_unload_init(struct module *mod)
628{
629 mod->refptr = alloc_percpu(struct module_ref);
630 if (!mod->refptr)
631 return -ENOMEM;
632
633 INIT_LIST_HEAD(&mod->source_list);
634 INIT_LIST_HEAD(&mod->target_list);
635
636
637 __this_cpu_write(mod->refptr->incs, 1);
638
639 mod->waiter = current;
640
641 return 0;
642}
643
644
645static int already_uses(struct module *a, struct module *b)
646{
647 struct module_use *use;
648
649 list_for_each_entry(use, &b->source_list, source_list) {
650 if (use->source == a) {
651 pr_debug("%s uses %s!\n", a->name, b->name);
652 return 1;
653 }
654 }
655 pr_debug("%s does not use %s!\n", a->name, b->name);
656 return 0;
657}
658
659
660
661
662
663
664
665
666static int add_module_usage(struct module *a, struct module *b)
667{
668 struct module_use *use;
669
670 pr_debug("Allocating new usage for %s.\n", a->name);
671 use = kmalloc(sizeof(*use), GFP_ATOMIC);
672 if (!use) {
673 printk(KERN_WARNING "%s: out of memory loading\n", a->name);
674 return -ENOMEM;
675 }
676
677 use->source = a;
678 use->target = b;
679 list_add(&use->source_list, &b->source_list);
680 list_add(&use->target_list, &a->target_list);
681 return 0;
682}
683
684
685int ref_module(struct module *a, struct module *b)
686{
687 int err;
688
689 if (b == NULL || already_uses(a, b))
690 return 0;
691
692
693 err = strong_try_module_get(b);
694 if (err)
695 return err;
696
697 err = add_module_usage(a, b);
698 if (err) {
699 module_put(b);
700 return err;
701 }
702 return 0;
703}
704EXPORT_SYMBOL_GPL(ref_module);
705
706
707static void module_unload_free(struct module *mod)
708{
709 struct module_use *use, *tmp;
710
711 mutex_lock(&module_mutex);
712 list_for_each_entry_safe(use, tmp, &mod->target_list, target_list) {
713 struct module *i = use->target;
714 pr_debug("%s unusing %s\n", mod->name, i->name);
715 module_put(i);
716 list_del(&use->source_list);
717 list_del(&use->target_list);
718 kfree(use);
719 }
720 mutex_unlock(&module_mutex);
721
722 free_percpu(mod->refptr);
723}
724
725#ifdef CONFIG_MODULE_FORCE_UNLOAD
726static inline int try_force_unload(unsigned int flags)
727{
728 int ret = (flags & O_TRUNC);
729 if (ret)
730 add_taint(TAINT_FORCED_RMMOD);
731 return ret;
732}
733#else
734static inline int try_force_unload(unsigned int flags)
735{
736 return 0;
737}
738#endif
739
740struct stopref
741{
742 struct module *mod;
743 int flags;
744 int *forced;
745};
746
747
748static int __try_stop_module(void *_sref)
749{
750 struct stopref *sref = _sref;
751
752
753 if (module_refcount(sref->mod) != 0) {
754 if (!(*sref->forced = try_force_unload(sref->flags)))
755 return -EWOULDBLOCK;
756 }
757
758
759 sref->mod->state = MODULE_STATE_GOING;
760 return 0;
761}
762
763static int try_stop_module(struct module *mod, int flags, int *forced)
764{
765 if (flags & O_NONBLOCK) {
766 struct stopref sref = { mod, flags, forced };
767
768 return stop_machine(__try_stop_module, &sref, NULL);
769 } else {
770
771 mod->state = MODULE_STATE_GOING;
772 synchronize_sched();
773 return 0;
774 }
775}
776
777unsigned long module_refcount(struct module *mod)
778{
779 unsigned long incs = 0, decs = 0;
780 int cpu;
781
782 for_each_possible_cpu(cpu)
783 decs += per_cpu_ptr(mod->refptr, cpu)->decs;
784
785
786
787
788
789
790
791
792
793
794
795
796
797 smp_rmb();
798 for_each_possible_cpu(cpu)
799 incs += per_cpu_ptr(mod->refptr, cpu)->incs;
800 return incs - decs;
801}
802EXPORT_SYMBOL(module_refcount);
803
804
805static void free_module(struct module *mod);
806
807static void wait_for_zero_refcount(struct module *mod)
808{
809
810 mutex_unlock(&module_mutex);
811 for (;;) {
812 pr_debug("Looking at refcount...\n");
813 set_current_state(TASK_UNINTERRUPTIBLE);
814 if (module_refcount(mod) == 0)
815 break;
816 schedule();
817 }
818 current->state = TASK_RUNNING;
819 mutex_lock(&module_mutex);
820}
821
822SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
823 unsigned int, flags)
824{
825 struct module *mod;
826 char name[MODULE_NAME_LEN];
827 int ret, forced = 0;
828
829 if (!capable(CAP_SYS_MODULE) || modules_disabled)
830 return -EPERM;
831
832 if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
833 return -EFAULT;
834 name[MODULE_NAME_LEN-1] = '\0';
835
836 if (mutex_lock_interruptible(&module_mutex) != 0)
837 return -EINTR;
838
839 mod = find_module(name);
840 if (!mod) {
841 ret = -ENOENT;
842 goto out;
843 }
844
845 if (!list_empty(&mod->source_list)) {
846
847 ret = -EWOULDBLOCK;
848 goto out;
849 }
850
851
852 if (mod->state != MODULE_STATE_LIVE) {
853
854
855 pr_debug("%s already dying\n", mod->name);
856 ret = -EBUSY;
857 goto out;
858 }
859
860
861 if (mod->init && !mod->exit) {
862 forced = try_force_unload(flags);
863 if (!forced) {
864
865 ret = -EBUSY;
866 goto out;
867 }
868 }
869
870
871 mod->waiter = current;
872
873
874 ret = try_stop_module(mod, flags, &forced);
875 if (ret != 0)
876 goto out;
877
878
879 if (!forced && module_refcount(mod) != 0)
880 wait_for_zero_refcount(mod);
881
882 mutex_unlock(&module_mutex);
883
884 if (mod->exit != NULL)
885 mod->exit();
886 blocking_notifier_call_chain(&module_notify_list,
887 MODULE_STATE_GOING, mod);
888 async_synchronize_full();
889
890
891 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
892
893 free_module(mod);
894 return 0;
895out:
896 mutex_unlock(&module_mutex);
897 return ret;
898}
899
900static inline void print_unload_info(struct seq_file *m, struct module *mod)
901{
902 struct module_use *use;
903 int printed_something = 0;
904
905 seq_printf(m, " %lu ", module_refcount(mod));
906
907
908
909 list_for_each_entry(use, &mod->source_list, source_list) {
910 printed_something = 1;
911 seq_printf(m, "%s,", use->source->name);
912 }
913
914 if (mod->init != NULL && mod->exit == NULL) {
915 printed_something = 1;
916 seq_printf(m, "[permanent],");
917 }
918
919 if (!printed_something)
920 seq_printf(m, "-");
921}
922
923void __symbol_put(const char *symbol)
924{
925 struct module *owner;
926
927 preempt_disable();
928 if (!find_symbol(symbol, &owner, NULL, true, false))
929 BUG();
930 module_put(owner);
931 preempt_enable();
932}
933EXPORT_SYMBOL(__symbol_put);
934
935
936void symbol_put_addr(void *addr)
937{
938 struct module *modaddr;
939 unsigned long a = (unsigned long)dereference_function_descriptor(addr);
940
941 if (core_kernel_text(a))
942 return;
943
944
945
946 modaddr = __module_text_address(a);
947 BUG_ON(!modaddr);
948 module_put(modaddr);
949}
950EXPORT_SYMBOL_GPL(symbol_put_addr);
951
952static ssize_t show_refcnt(struct module_attribute *mattr,
953 struct module_kobject *mk, char *buffer)
954{
955 return sprintf(buffer, "%lu\n", module_refcount(mk->mod));
956}
957
958static struct module_attribute modinfo_refcnt =
959 __ATTR(refcnt, 0444, show_refcnt, NULL);
960
961void __module_get(struct module *module)
962{
963 if (module) {
964 preempt_disable();
965 __this_cpu_inc(module->refptr->incs);
966 trace_module_get(module, _RET_IP_);
967 preempt_enable();
968 }
969}
970EXPORT_SYMBOL(__module_get);
971
972bool try_module_get(struct module *module)
973{
974 bool ret = true;
975
976 if (module) {
977 preempt_disable();
978
979 if (likely(module_is_live(module))) {
980 __this_cpu_inc(module->refptr->incs);
981 trace_module_get(module, _RET_IP_);
982 } else
983 ret = false;
984
985 preempt_enable();
986 }
987 return ret;
988}
989EXPORT_SYMBOL(try_module_get);
990
991void module_put(struct module *module)
992{
993 if (module) {
994 preempt_disable();
995 smp_wmb();
996 __this_cpu_inc(module->refptr->decs);
997
998 trace_module_put(module, _RET_IP_);
999
1000 if (unlikely(!module_is_live(module)))
1001 wake_up_process(module->waiter);
1002 preempt_enable();
1003 }
1004}
1005EXPORT_SYMBOL(module_put);
1006
1007#else
1008static inline void print_unload_info(struct seq_file *m, struct module *mod)
1009{
1010
1011 seq_printf(m, " - -");
1012}
1013
1014static inline void module_unload_free(struct module *mod)
1015{
1016}
1017
1018int ref_module(struct module *a, struct module *b)
1019{
1020 return strong_try_module_get(b);
1021}
1022EXPORT_SYMBOL_GPL(ref_module);
1023
1024static inline int module_unload_init(struct module *mod)
1025{
1026 return 0;
1027}
1028#endif
1029
1030static size_t module_flags_taint(struct module *mod, char *buf)
1031{
1032 size_t l = 0;
1033
1034 if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
1035 buf[l++] = 'P';
1036 if (mod->taints & (1 << TAINT_OOT_MODULE))
1037 buf[l++] = 'O';
1038 if (mod->taints & (1 << TAINT_FORCED_MODULE))
1039 buf[l++] = 'F';
1040 if (mod->taints & (1 << TAINT_CRAP))
1041 buf[l++] = 'C';
1042
1043
1044
1045
1046
1047 return l;
1048}
1049
1050static ssize_t show_initstate(struct module_attribute *mattr,
1051 struct module_kobject *mk, char *buffer)
1052{
1053 const char *state = "unknown";
1054
1055 switch (mk->mod->state) {
1056 case MODULE_STATE_LIVE:
1057 state = "live";
1058 break;
1059 case MODULE_STATE_COMING:
1060 state = "coming";
1061 break;
1062 case MODULE_STATE_GOING:
1063 state = "going";
1064 break;
1065 default:
1066 BUG();
1067 }
1068 return sprintf(buffer, "%s\n", state);
1069}
1070
1071static struct module_attribute modinfo_initstate =
1072 __ATTR(initstate, 0444, show_initstate, NULL);
1073
1074static ssize_t store_uevent(struct module_attribute *mattr,
1075 struct module_kobject *mk,
1076 const char *buffer, size_t count)
1077{
1078 enum kobject_action action;
1079
1080 if (kobject_action_type(buffer, count, &action) == 0)
1081 kobject_uevent(&mk->kobj, action);
1082 return count;
1083}
1084
1085struct module_attribute module_uevent =
1086 __ATTR(uevent, 0200, NULL, store_uevent);
1087
1088static ssize_t show_coresize(struct module_attribute *mattr,
1089 struct module_kobject *mk, char *buffer)
1090{
1091 return sprintf(buffer, "%u\n", mk->mod->core_size);
1092}
1093
1094static struct module_attribute modinfo_coresize =
1095 __ATTR(coresize, 0444, show_coresize, NULL);
1096
1097static ssize_t show_initsize(struct module_attribute *mattr,
1098 struct module_kobject *mk, char *buffer)
1099{
1100 return sprintf(buffer, "%u\n", mk->mod->init_size);
1101}
1102
1103static struct module_attribute modinfo_initsize =
1104 __ATTR(initsize, 0444, show_initsize, NULL);
1105
1106static ssize_t show_taint(struct module_attribute *mattr,
1107 struct module_kobject *mk, char *buffer)
1108{
1109 size_t l;
1110
1111 l = module_flags_taint(mk->mod, buffer);
1112 buffer[l++] = '\n';
1113 return l;
1114}
1115
1116static struct module_attribute modinfo_taint =
1117 __ATTR(taint, 0444, show_taint, NULL);
1118
1119static struct module_attribute *modinfo_attrs[] = {
1120 &module_uevent,
1121 &modinfo_version,
1122 &modinfo_srcversion,
1123 &modinfo_initstate,
1124 &modinfo_coresize,
1125 &modinfo_initsize,
1126 &modinfo_taint,
1127#ifdef CONFIG_MODULE_UNLOAD
1128 &modinfo_refcnt,
1129#endif
1130 NULL,
1131};
1132
1133static const char vermagic[] = VERMAGIC_STRING;
1134
1135static int try_to_force_load(struct module *mod, const char *reason)
1136{
1137#ifdef CONFIG_MODULE_FORCE_LOAD
1138 if (!test_taint(TAINT_FORCED_MODULE))
1139 printk(KERN_WARNING "%s: %s: kernel tainted.\n",
1140 mod->name, reason);
1141 add_taint_module(mod, TAINT_FORCED_MODULE);
1142 return 0;
1143#else
1144 return -ENOEXEC;
1145#endif
1146}
1147
1148#ifdef CONFIG_MODVERSIONS
1149
1150static unsigned long maybe_relocated(unsigned long crc,
1151 const struct module *crc_owner)
1152{
1153#ifdef ARCH_RELOCATES_KCRCTAB
1154 if (crc_owner == NULL)
1155 return crc - (unsigned long)reloc_start;
1156#endif
1157 return crc;
1158}
1159
1160static int check_version(Elf_Shdr *sechdrs,
1161 unsigned int versindex,
1162 const char *symname,
1163 struct module *mod,
1164 const unsigned long *crc,
1165 const struct module *crc_owner)
1166{
1167 unsigned int i, num_versions;
1168 struct modversion_info *versions;
1169
1170
1171 if (!crc)
1172 return 1;
1173
1174
1175 if (versindex == 0)
1176 return try_to_force_load(mod, symname) == 0;
1177
1178 versions = (void *) sechdrs[versindex].sh_addr;
1179 num_versions = sechdrs[versindex].sh_size
1180 / sizeof(struct modversion_info);
1181
1182 for (i = 0; i < num_versions; i++) {
1183 if (strcmp(versions[i].name, symname) != 0)
1184 continue;
1185
1186 if (versions[i].crc == maybe_relocated(*crc, crc_owner))
1187 return 1;
1188 pr_debug("Found checksum %lX vs module %lX\n",
1189 maybe_relocated(*crc, crc_owner), versions[i].crc);
1190 goto bad_version;
1191 }
1192
1193 printk(KERN_WARNING "%s: no symbol version for %s\n",
1194 mod->name, symname);
1195 return 0;
1196
1197bad_version:
1198 printk("%s: disagrees about version of symbol %s\n",
1199 mod->name, symname);
1200 return 0;
1201}
1202
1203static inline int check_modstruct_version(Elf_Shdr *sechdrs,
1204 unsigned int versindex,
1205 struct module *mod)
1206{
1207 const unsigned long *crc;
1208
1209
1210
1211 if (!find_symbol(MODULE_SYMBOL_PREFIX "module_layout", NULL,
1212 &crc, true, false))
1213 BUG();
1214 return check_version(sechdrs, versindex, "module_layout", mod, crc,
1215 NULL);
1216}
1217
1218
1219static inline int same_magic(const char *amagic, const char *bmagic,
1220 bool has_crcs)
1221{
1222 if (has_crcs) {
1223 amagic += strcspn(amagic, " ");
1224 bmagic += strcspn(bmagic, " ");
1225 }
1226 return strcmp(amagic, bmagic) == 0;
1227}
1228#else
1229static inline int check_version(Elf_Shdr *sechdrs,
1230 unsigned int versindex,
1231 const char *symname,
1232 struct module *mod,
1233 const unsigned long *crc,
1234 const struct module *crc_owner)
1235{
1236 return 1;
1237}
1238
1239static inline int check_modstruct_version(Elf_Shdr *sechdrs,
1240 unsigned int versindex,
1241 struct module *mod)
1242{
1243 return 1;
1244}
1245
1246static inline int same_magic(const char *amagic, const char *bmagic,
1247 bool has_crcs)
1248{
1249 return strcmp(amagic, bmagic) == 0;
1250}
1251#endif
1252
1253
1254static const struct kernel_symbol *resolve_symbol(struct module *mod,
1255 const struct load_info *info,
1256 const char *name,
1257 char ownername[])
1258{
1259 struct module *owner;
1260 const struct kernel_symbol *sym;
1261 const unsigned long *crc;
1262 int err;
1263
1264 mutex_lock(&module_mutex);
1265 sym = find_symbol(name, &owner, &crc,
1266 !(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true);
1267 if (!sym)
1268 goto unlock;
1269
1270 if (!check_version(info->sechdrs, info->index.vers, name, mod, crc,
1271 owner)) {
1272 sym = ERR_PTR(-EINVAL);
1273 goto getname;
1274 }
1275
1276 err = ref_module(mod, owner);
1277 if (err) {
1278 sym = ERR_PTR(err);
1279 goto getname;
1280 }
1281
1282getname:
1283
1284 strncpy(ownername, module_name(owner), MODULE_NAME_LEN);
1285unlock:
1286 mutex_unlock(&module_mutex);
1287 return sym;
1288}
1289
1290static const struct kernel_symbol *
1291resolve_symbol_wait(struct module *mod,
1292 const struct load_info *info,
1293 const char *name)
1294{
1295 const struct kernel_symbol *ksym;
1296 char owner[MODULE_NAME_LEN];
1297
1298 if (wait_event_interruptible_timeout(module_wq,
1299 !IS_ERR(ksym = resolve_symbol(mod, info, name, owner))
1300 || PTR_ERR(ksym) != -EBUSY,
1301 30 * HZ) <= 0) {
1302 printk(KERN_WARNING "%s: gave up waiting for init of module %s.\n",
1303 mod->name, owner);
1304 }
1305 return ksym;
1306}
1307
1308
1309
1310
1311
1312#ifdef CONFIG_SYSFS
1313
1314#ifdef CONFIG_KALLSYMS
1315static inline bool sect_empty(const Elf_Shdr *sect)
1316{
1317 return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0;
1318}
1319
1320struct module_sect_attr
1321{
1322 struct module_attribute mattr;
1323 char *name;
1324 unsigned long address;
1325};
1326
1327struct module_sect_attrs
1328{
1329 struct attribute_group grp;
1330 unsigned int nsections;
1331 struct module_sect_attr attrs[0];
1332};
1333
1334static ssize_t module_sect_show(struct module_attribute *mattr,
1335 struct module_kobject *mk, char *buf)
1336{
1337 struct module_sect_attr *sattr =
1338 container_of(mattr, struct module_sect_attr, mattr);
1339 return sprintf(buf, "0x%pK\n", (void *)sattr->address);
1340}
1341
1342static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
1343{
1344 unsigned int section;
1345
1346 for (section = 0; section < sect_attrs->nsections; section++)
1347 kfree(sect_attrs->attrs[section].name);
1348 kfree(sect_attrs);
1349}
1350
1351static void add_sect_attrs(struct module *mod, const struct load_info *info)
1352{
1353 unsigned int nloaded = 0, i, size[2];
1354 struct module_sect_attrs *sect_attrs;
1355 struct module_sect_attr *sattr;
1356 struct attribute **gattr;
1357
1358
1359 for (i = 0; i < info->hdr->e_shnum; i++)
1360 if (!sect_empty(&info->sechdrs[i]))
1361 nloaded++;
1362 size[0] = ALIGN(sizeof(*sect_attrs)
1363 + nloaded * sizeof(sect_attrs->attrs[0]),
1364 sizeof(sect_attrs->grp.attrs[0]));
1365 size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]);
1366 sect_attrs = kzalloc(size[0] + size[1], GFP_KERNEL);
1367 if (sect_attrs == NULL)
1368 return;
1369
1370
1371 sect_attrs->grp.name = "sections";
1372 sect_attrs->grp.attrs = (void *)sect_attrs + size[0];
1373
1374 sect_attrs->nsections = 0;
1375 sattr = §_attrs->attrs[0];
1376 gattr = §_attrs->grp.attrs[0];
1377 for (i = 0; i < info->hdr->e_shnum; i++) {
1378 Elf_Shdr *sec = &info->sechdrs[i];
1379 if (sect_empty(sec))
1380 continue;
1381 sattr->address = sec->sh_addr;
1382 sattr->name = kstrdup(info->secstrings + sec->sh_name,
1383 GFP_KERNEL);
1384 if (sattr->name == NULL)
1385 goto out;
1386 sect_attrs->nsections++;
1387 sysfs_attr_init(&sattr->mattr.attr);
1388 sattr->mattr.show = module_sect_show;
1389 sattr->mattr.store = NULL;
1390 sattr->mattr.attr.name = sattr->name;
1391 sattr->mattr.attr.mode = S_IRUGO;
1392 *(gattr++) = &(sattr++)->mattr.attr;
1393 }
1394 *gattr = NULL;
1395
1396 if (sysfs_create_group(&mod->mkobj.kobj, §_attrs->grp))
1397 goto out;
1398
1399 mod->sect_attrs = sect_attrs;
1400 return;
1401 out:
1402 free_sect_attrs(sect_attrs);
1403}
1404
1405static void remove_sect_attrs(struct module *mod)
1406{
1407 if (mod->sect_attrs) {
1408 sysfs_remove_group(&mod->mkobj.kobj,
1409 &mod->sect_attrs->grp);
1410
1411
1412 free_sect_attrs(mod->sect_attrs);
1413 mod->sect_attrs = NULL;
1414 }
1415}
1416
1417
1418
1419
1420
1421struct module_notes_attrs {
1422 struct kobject *dir;
1423 unsigned int notes;
1424 struct bin_attribute attrs[0];
1425};
1426
1427static ssize_t module_notes_read(struct file *filp, struct kobject *kobj,
1428 struct bin_attribute *bin_attr,
1429 char *buf, loff_t pos, size_t count)
1430{
1431
1432
1433
1434 memcpy(buf, bin_attr->private + pos, count);
1435 return count;
1436}
1437
1438static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
1439 unsigned int i)
1440{
1441 if (notes_attrs->dir) {
1442 while (i-- > 0)
1443 sysfs_remove_bin_file(notes_attrs->dir,
1444 ¬es_attrs->attrs[i]);
1445 kobject_put(notes_attrs->dir);
1446 }
1447 kfree(notes_attrs);
1448}
1449
1450static void add_notes_attrs(struct module *mod, const struct load_info *info)
1451{
1452 unsigned int notes, loaded, i;
1453 struct module_notes_attrs *notes_attrs;
1454 struct bin_attribute *nattr;
1455
1456
1457 if (!mod->sect_attrs)
1458 return;
1459
1460
1461 notes = 0;
1462 for (i = 0; i < info->hdr->e_shnum; i++)
1463 if (!sect_empty(&info->sechdrs[i]) &&
1464 (info->sechdrs[i].sh_type == SHT_NOTE))
1465 ++notes;
1466
1467 if (notes == 0)
1468 return;
1469
1470 notes_attrs = kzalloc(sizeof(*notes_attrs)
1471 + notes * sizeof(notes_attrs->attrs[0]),
1472 GFP_KERNEL);
1473 if (notes_attrs == NULL)
1474 return;
1475
1476 notes_attrs->notes = notes;
1477 nattr = ¬es_attrs->attrs[0];
1478 for (loaded = i = 0; i < info->hdr->e_shnum; ++i) {
1479 if (sect_empty(&info->sechdrs[i]))
1480 continue;
1481 if (info->sechdrs[i].sh_type == SHT_NOTE) {
1482 sysfs_bin_attr_init(nattr);
1483 nattr->attr.name = mod->sect_attrs->attrs[loaded].name;
1484 nattr->attr.mode = S_IRUGO;
1485 nattr->size = info->sechdrs[i].sh_size;
1486 nattr->private = (void *) info->sechdrs[i].sh_addr;
1487 nattr->read = module_notes_read;
1488 ++nattr;
1489 }
1490 ++loaded;
1491 }
1492
1493 notes_attrs->dir = kobject_create_and_add("notes", &mod->mkobj.kobj);
1494 if (!notes_attrs->dir)
1495 goto out;
1496
1497 for (i = 0; i < notes; ++i)
1498 if (sysfs_create_bin_file(notes_attrs->dir,
1499 ¬es_attrs->attrs[i]))
1500 goto out;
1501
1502 mod->notes_attrs = notes_attrs;
1503 return;
1504
1505 out:
1506 free_notes_attrs(notes_attrs, i);
1507}
1508
1509static void remove_notes_attrs(struct module *mod)
1510{
1511 if (mod->notes_attrs)
1512 free_notes_attrs(mod->notes_attrs, mod->notes_attrs->notes);
1513}
1514
1515#else
1516
1517static inline void add_sect_attrs(struct module *mod,
1518 const struct load_info *info)
1519{
1520}
1521
1522static inline void remove_sect_attrs(struct module *mod)
1523{
1524}
1525
1526static inline void add_notes_attrs(struct module *mod,
1527 const struct load_info *info)
1528{
1529}
1530
1531static inline void remove_notes_attrs(struct module *mod)
1532{
1533}
1534#endif
1535
1536static void add_usage_links(struct module *mod)
1537{
1538#ifdef CONFIG_MODULE_UNLOAD
1539 struct module_use *use;
1540 int nowarn;
1541
1542 mutex_lock(&module_mutex);
1543 list_for_each_entry(use, &mod->target_list, target_list) {
1544 nowarn = sysfs_create_link(use->target->holders_dir,
1545 &mod->mkobj.kobj, mod->name);
1546 }
1547 mutex_unlock(&module_mutex);
1548#endif
1549}
1550
1551static void del_usage_links(struct module *mod)
1552{
1553#ifdef CONFIG_MODULE_UNLOAD
1554 struct module_use *use;
1555
1556 mutex_lock(&module_mutex);
1557 list_for_each_entry(use, &mod->target_list, target_list)
1558 sysfs_remove_link(use->target->holders_dir, mod->name);
1559 mutex_unlock(&module_mutex);
1560#endif
1561}
1562
1563static int module_add_modinfo_attrs(struct module *mod)
1564{
1565 struct module_attribute *attr;
1566 struct module_attribute *temp_attr;
1567 int error = 0;
1568 int i;
1569
1570 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
1571 (ARRAY_SIZE(modinfo_attrs) + 1)),
1572 GFP_KERNEL);
1573 if (!mod->modinfo_attrs)
1574 return -ENOMEM;
1575
1576 temp_attr = mod->modinfo_attrs;
1577 for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
1578 if (!attr->test ||
1579 (attr->test && attr->test(mod))) {
1580 memcpy(temp_attr, attr, sizeof(*temp_attr));
1581 sysfs_attr_init(&temp_attr->attr);
1582 error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr);
1583 ++temp_attr;
1584 }
1585 }
1586 return error;
1587}
1588
1589static void module_remove_modinfo_attrs(struct module *mod)
1590{
1591 struct module_attribute *attr;
1592 int i;
1593
1594 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
1595
1596 if (!attr->attr.name)
1597 break;
1598 sysfs_remove_file(&mod->mkobj.kobj,&attr->attr);
1599 if (attr->free)
1600 attr->free(mod);
1601 }
1602 kfree(mod->modinfo_attrs);
1603}
1604
1605static int mod_sysfs_init(struct module *mod)
1606{
1607 int err;
1608 struct kobject *kobj;
1609
1610 if (!module_sysfs_initialized) {
1611 printk(KERN_ERR "%s: module sysfs not initialized\n",
1612 mod->name);
1613 err = -EINVAL;
1614 goto out;
1615 }
1616
1617 kobj = kset_find_obj(module_kset, mod->name);
1618 if (kobj) {
1619 printk(KERN_ERR "%s: module is already loaded\n", mod->name);
1620 kobject_put(kobj);
1621 err = -EINVAL;
1622 goto out;
1623 }
1624
1625 mod->mkobj.mod = mod;
1626
1627 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj));
1628 mod->mkobj.kobj.kset = module_kset;
1629 err = kobject_init_and_add(&mod->mkobj.kobj, &module_ktype, NULL,
1630 "%s", mod->name);
1631 if (err)
1632 kobject_put(&mod->mkobj.kobj);
1633
1634
1635out:
1636 return err;
1637}
1638
1639static int mod_sysfs_setup(struct module *mod,
1640 const struct load_info *info,
1641 struct kernel_param *kparam,
1642 unsigned int num_params)
1643{
1644 int err;
1645
1646 err = mod_sysfs_init(mod);
1647 if (err)
1648 goto out;
1649
1650 mod->holders_dir = kobject_create_and_add("holders", &mod->mkobj.kobj);
1651 if (!mod->holders_dir) {
1652 err = -ENOMEM;
1653 goto out_unreg;
1654 }
1655
1656 err = module_param_sysfs_setup(mod, kparam, num_params);
1657 if (err)
1658 goto out_unreg_holders;
1659
1660 err = module_add_modinfo_attrs(mod);
1661 if (err)
1662 goto out_unreg_param;
1663
1664 add_usage_links(mod);
1665 add_sect_attrs(mod, info);
1666 add_notes_attrs(mod, info);
1667
1668 kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD);
1669 return 0;
1670
1671out_unreg_param:
1672 module_param_sysfs_remove(mod);
1673out_unreg_holders:
1674 kobject_put(mod->holders_dir);
1675out_unreg:
1676 kobject_put(&mod->mkobj.kobj);
1677out:
1678 return err;
1679}
1680
1681static void mod_sysfs_fini(struct module *mod)
1682{
1683 remove_notes_attrs(mod);
1684 remove_sect_attrs(mod);
1685 kobject_put(&mod->mkobj.kobj);
1686}
1687
1688#else
1689
1690static int mod_sysfs_setup(struct module *mod,
1691 const struct load_info *info,
1692 struct kernel_param *kparam,
1693 unsigned int num_params)
1694{
1695 return 0;
1696}
1697
1698static void mod_sysfs_fini(struct module *mod)
1699{
1700}
1701
1702static void module_remove_modinfo_attrs(struct module *mod)
1703{
1704}
1705
1706static void del_usage_links(struct module *mod)
1707{
1708}
1709
1710#endif
1711
1712static void mod_sysfs_teardown(struct module *mod)
1713{
1714 del_usage_links(mod);
1715 module_remove_modinfo_attrs(mod);
1716 module_param_sysfs_remove(mod);
1717 kobject_put(mod->mkobj.drivers_dir);
1718 kobject_put(mod->holders_dir);
1719 mod_sysfs_fini(mod);
1720}
1721
1722
1723
1724
1725
1726static int __unlink_module(void *_mod)
1727{
1728 struct module *mod = _mod;
1729 list_del(&mod->list);
1730 module_bug_cleanup(mod);
1731 return 0;
1732}
1733
1734#ifdef CONFIG_DEBUG_SET_MODULE_RONX
1735
1736
1737
1738
1739void set_page_attributes(void *start, void *end, int (*set)(unsigned long start, int num_pages))
1740{
1741 unsigned long begin_pfn = PFN_DOWN((unsigned long)start);
1742 unsigned long end_pfn = PFN_DOWN((unsigned long)end);
1743
1744 if (end_pfn > begin_pfn)
1745 set(begin_pfn << PAGE_SHIFT, end_pfn - begin_pfn);
1746}
1747
1748static void set_section_ro_nx(void *base,
1749 unsigned long text_size,
1750 unsigned long ro_size,
1751 unsigned long total_size)
1752{
1753
1754 unsigned long begin_pfn;
1755 unsigned long end_pfn;
1756
1757
1758
1759
1760
1761
1762 if (ro_size > 0)
1763 set_page_attributes(base, base + ro_size, set_memory_ro);
1764
1765
1766
1767
1768
1769
1770 if (total_size > text_size) {
1771 begin_pfn = PFN_UP((unsigned long)base + text_size);
1772 end_pfn = PFN_UP((unsigned long)base + total_size);
1773 if (end_pfn > begin_pfn)
1774 set_memory_nx(begin_pfn << PAGE_SHIFT, end_pfn - begin_pfn);
1775 }
1776}
1777
1778static void unset_module_core_ro_nx(struct module *mod)
1779{
1780 set_page_attributes(mod->module_core + mod->core_text_size,
1781 mod->module_core + mod->core_size,
1782 set_memory_x);
1783 set_page_attributes(mod->module_core,
1784 mod->module_core + mod->core_ro_size,
1785 set_memory_rw);
1786}
1787
1788static void unset_module_init_ro_nx(struct module *mod)
1789{
1790 set_page_attributes(mod->module_init + mod->init_text_size,
1791 mod->module_init + mod->init_size,
1792 set_memory_x);
1793 set_page_attributes(mod->module_init,
1794 mod->module_init + mod->init_ro_size,
1795 set_memory_rw);
1796}
1797
1798
1799void set_all_modules_text_rw(void)
1800{
1801 struct module *mod;
1802
1803 mutex_lock(&module_mutex);
1804 list_for_each_entry_rcu(mod, &modules, list) {
1805 if (mod->state == MODULE_STATE_UNFORMED)
1806 continue;
1807 if ((mod->module_core) && (mod->core_text_size)) {
1808 set_page_attributes(mod->module_core,
1809 mod->module_core + mod->core_text_size,
1810 set_memory_rw);
1811 }
1812 if ((mod->module_init) && (mod->init_text_size)) {
1813 set_page_attributes(mod->module_init,
1814 mod->module_init + mod->init_text_size,
1815 set_memory_rw);
1816 }
1817 }
1818 mutex_unlock(&module_mutex);
1819}
1820
1821
1822void set_all_modules_text_ro(void)
1823{
1824 struct module *mod;
1825
1826 mutex_lock(&module_mutex);
1827 list_for_each_entry_rcu(mod, &modules, list) {
1828 if (mod->state == MODULE_STATE_UNFORMED)
1829 continue;
1830 if ((mod->module_core) && (mod->core_text_size)) {
1831 set_page_attributes(mod->module_core,
1832 mod->module_core + mod->core_text_size,
1833 set_memory_ro);
1834 }
1835 if ((mod->module_init) && (mod->init_text_size)) {
1836 set_page_attributes(mod->module_init,
1837 mod->module_init + mod->init_text_size,
1838 set_memory_ro);
1839 }
1840 }
1841 mutex_unlock(&module_mutex);
1842}
1843#else
1844static inline void set_section_ro_nx(void *base, unsigned long text_size, unsigned long ro_size, unsigned long total_size) { }
1845static void unset_module_core_ro_nx(struct module *mod) { }
1846static void unset_module_init_ro_nx(struct module *mod) { }
1847#endif
1848
1849void __weak module_free(struct module *mod, void *module_region)
1850{
1851 vfree(module_region);
1852}
1853
1854void __weak module_arch_cleanup(struct module *mod)
1855{
1856}
1857
1858
1859static void free_module(struct module *mod)
1860{
1861 trace_module_free(mod);
1862
1863
1864 mutex_lock(&module_mutex);
1865 stop_machine(__unlink_module, mod, NULL);
1866 mutex_unlock(&module_mutex);
1867 mod_sysfs_teardown(mod);
1868
1869
1870 ddebug_remove_module(mod->name);
1871
1872
1873 module_arch_cleanup(mod);
1874
1875
1876 module_unload_free(mod);
1877
1878
1879 destroy_params(mod->kp, mod->num_kp);
1880
1881
1882 unset_module_init_ro_nx(mod);
1883 module_free(mod, mod->module_init);
1884 kfree(mod->args);
1885 percpu_modfree(mod);
1886
1887
1888 lockdep_free_key_range(mod->module_core, mod->core_size);
1889
1890
1891 unset_module_core_ro_nx(mod);
1892 module_free(mod, mod->module_core);
1893
1894#ifdef CONFIG_MPU
1895 update_protections(current->mm);
1896#endif
1897}
1898
1899void *__symbol_get(const char *symbol)
1900{
1901 struct module *owner;
1902 const struct kernel_symbol *sym;
1903
1904 preempt_disable();
1905 sym = find_symbol(symbol, &owner, NULL, true, true);
1906 if (sym && strong_try_module_get(owner))
1907 sym = NULL;
1908 preempt_enable();
1909
1910 return sym ? (void *)sym->value : NULL;
1911}
1912EXPORT_SYMBOL_GPL(__symbol_get);
1913
1914
1915
1916
1917
1918
1919
1920static int verify_export_symbols(struct module *mod)
1921{
1922 unsigned int i;
1923 struct module *owner;
1924 const struct kernel_symbol *s;
1925 struct {
1926 const struct kernel_symbol *sym;
1927 unsigned int num;
1928 } arr[] = {
1929 { mod->syms, mod->num_syms },
1930 { mod->gpl_syms, mod->num_gpl_syms },
1931 { mod->gpl_future_syms, mod->num_gpl_future_syms },
1932#ifdef CONFIG_UNUSED_SYMBOLS
1933 { mod->unused_syms, mod->num_unused_syms },
1934 { mod->unused_gpl_syms, mod->num_unused_gpl_syms },
1935#endif
1936 };
1937
1938 for (i = 0; i < ARRAY_SIZE(arr); i++) {
1939 for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
1940 if (find_symbol(s->name, &owner, NULL, true, false)) {
1941 printk(KERN_ERR
1942 "%s: exports duplicate symbol %s"
1943 " (owned by %s)\n",
1944 mod->name, s->name, module_name(owner));
1945 return -ENOEXEC;
1946 }
1947 }
1948 }
1949 return 0;
1950}
1951
1952
1953static int simplify_symbols(struct module *mod, const struct load_info *info)
1954{
1955 Elf_Shdr *symsec = &info->sechdrs[info->index.sym];
1956 Elf_Sym *sym = (void *)symsec->sh_addr;
1957 unsigned long secbase;
1958 unsigned int i;
1959 int ret = 0;
1960 const struct kernel_symbol *ksym;
1961
1962 for (i = 1; i < symsec->sh_size / sizeof(Elf_Sym); i++) {
1963 const char *name = info->strtab + sym[i].st_name;
1964
1965 switch (sym[i].st_shndx) {
1966 case SHN_COMMON:
1967
1968
1969 pr_debug("Common symbol: %s\n", name);
1970 printk("%s: please compile with -fno-common\n",
1971 mod->name);
1972 ret = -ENOEXEC;
1973 break;
1974
1975 case SHN_ABS:
1976
1977 pr_debug("Absolute symbol: 0x%08lx\n",
1978 (long)sym[i].st_value);
1979 break;
1980
1981 case SHN_UNDEF:
1982 ksym = resolve_symbol_wait(mod, info, name);
1983
1984 if (ksym && !IS_ERR(ksym)) {
1985 sym[i].st_value = ksym->value;
1986 break;
1987 }
1988
1989
1990 if (!ksym && ELF_ST_BIND(sym[i].st_info) == STB_WEAK)
1991 break;
1992
1993 printk(KERN_WARNING "%s: Unknown symbol %s (err %li)\n",
1994 mod->name, name, PTR_ERR(ksym));
1995 ret = PTR_ERR(ksym) ?: -ENOENT;
1996 break;
1997
1998 default:
1999
2000 if (sym[i].st_shndx == info->index.pcpu)
2001 secbase = (unsigned long)mod_percpu(mod);
2002 else
2003 secbase = info->sechdrs[sym[i].st_shndx].sh_addr;
2004 sym[i].st_value += secbase;
2005 break;
2006 }
2007 }
2008
2009 return ret;
2010}
2011
2012static int apply_relocations(struct module *mod, const struct load_info *info)
2013{
2014 unsigned int i;
2015 int err = 0;
2016
2017
2018 for (i = 1; i < info->hdr->e_shnum; i++) {
2019 unsigned int infosec = info->sechdrs[i].sh_info;
2020
2021
2022 if (infosec >= info->hdr->e_shnum)
2023 continue;
2024
2025
2026 if (!(info->sechdrs[infosec].sh_flags & SHF_ALLOC))
2027 continue;
2028
2029 if (info->sechdrs[i].sh_type == SHT_REL)
2030 err = apply_relocate(info->sechdrs, info->strtab,
2031 info->index.sym, i, mod);
2032 else if (info->sechdrs[i].sh_type == SHT_RELA)
2033 err = apply_relocate_add(info->sechdrs, info->strtab,
2034 info->index.sym, i, mod);
2035 if (err < 0)
2036 break;
2037 }
2038 return err;
2039}
2040
2041
2042unsigned int __weak arch_mod_section_prepend(struct module *mod,
2043 unsigned int section)
2044{
2045
2046 return 0;
2047}
2048
2049
2050static long get_offset(struct module *mod, unsigned int *size,
2051 Elf_Shdr *sechdr, unsigned int section)
2052{
2053 long ret;
2054
2055 *size += arch_mod_section_prepend(mod, section);
2056 ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
2057 *size = ret + sechdr->sh_size;
2058 return ret;
2059}
2060
2061
2062
2063
2064
2065static void layout_sections(struct module *mod, struct load_info *info)
2066{
2067 static unsigned long const masks[][2] = {
2068
2069
2070
2071 { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
2072 { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
2073 { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
2074 { ARCH_SHF_SMALL | SHF_ALLOC, 0 }
2075 };
2076 unsigned int m, i;
2077
2078 for (i = 0; i < info->hdr->e_shnum; i++)
2079 info->sechdrs[i].sh_entsize = ~0UL;
2080
2081 pr_debug("Core section allocation order:\n");
2082 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
2083 for (i = 0; i < info->hdr->e_shnum; ++i) {
2084 Elf_Shdr *s = &info->sechdrs[i];
2085 const char *sname = info->secstrings + s->sh_name;
2086
2087 if ((s->sh_flags & masks[m][0]) != masks[m][0]
2088 || (s->sh_flags & masks[m][1])
2089 || s->sh_entsize != ~0UL
2090 || strstarts(sname, ".init"))
2091 continue;
2092 s->sh_entsize = get_offset(mod, &mod->core_size, s, i);
2093 pr_debug("\t%s\n", sname);
2094 }
2095 switch (m) {
2096 case 0:
2097 mod->core_size = debug_align(mod->core_size);
2098 mod->core_text_size = mod->core_size;
2099 break;
2100 case 1:
2101 mod->core_size = debug_align(mod->core_size);
2102 mod->core_ro_size = mod->core_size;
2103 break;
2104 case 3:
2105 mod->core_size = debug_align(mod->core_size);
2106 break;
2107 }
2108 }
2109
2110 pr_debug("Init section allocation order:\n");
2111 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
2112 for (i = 0; i < info->hdr->e_shnum; ++i) {
2113 Elf_Shdr *s = &info->sechdrs[i];
2114 const char *sname = info->secstrings + s->sh_name;
2115
2116 if ((s->sh_flags & masks[m][0]) != masks[m][0]
2117 || (s->sh_flags & masks[m][1])
2118 || s->sh_entsize != ~0UL
2119 || !strstarts(sname, ".init"))
2120 continue;
2121 s->sh_entsize = (get_offset(mod, &mod->init_size, s, i)
2122 | INIT_OFFSET_MASK);
2123 pr_debug("\t%s\n", sname);
2124 }
2125 switch (m) {
2126 case 0:
2127 mod->init_size = debug_align(mod->init_size);
2128 mod->init_text_size = mod->init_size;
2129 break;
2130 case 1:
2131 mod->init_size = debug_align(mod->init_size);
2132 mod->init_ro_size = mod->init_size;
2133 break;
2134 case 3:
2135 mod->init_size = debug_align(mod->init_size);
2136 break;
2137 }
2138 }
2139}
2140
2141static void set_license(struct module *mod, const char *license)
2142{
2143 if (!license)
2144 license = "unspecified";
2145
2146 if (!license_is_gpl_compatible(license)) {
2147 if (!test_taint(TAINT_PROPRIETARY_MODULE))
2148 printk(KERN_WARNING "%s: module license '%s' taints "
2149 "kernel.\n", mod->name, license);
2150 add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
2151 }
2152}
2153
2154
2155static char *next_string(char *string, unsigned long *secsize)
2156{
2157
2158 while (string[0]) {
2159 string++;
2160 if ((*secsize)-- <= 1)
2161 return NULL;
2162 }
2163
2164
2165 while (!string[0]) {
2166 string++;
2167 if ((*secsize)-- <= 1)
2168 return NULL;
2169 }
2170 return string;
2171}
2172
2173static char *get_modinfo(struct load_info *info, const char *tag)
2174{
2175 char *p;
2176 unsigned int taglen = strlen(tag);
2177 Elf_Shdr *infosec = &info->sechdrs[info->index.info];
2178 unsigned long size = infosec->sh_size;
2179
2180 for (p = (char *)infosec->sh_addr; p; p = next_string(p, &size)) {
2181 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
2182 return p + taglen + 1;
2183 }
2184 return NULL;
2185}
2186
2187static void setup_modinfo(struct module *mod, struct load_info *info)
2188{
2189 struct module_attribute *attr;
2190 int i;
2191
2192 for (i = 0; (attr = modinfo_attrs[i]); i++) {
2193 if (attr->setup)
2194 attr->setup(mod, get_modinfo(info, attr->attr.name));
2195 }
2196}
2197
2198static void free_modinfo(struct module *mod)
2199{
2200 struct module_attribute *attr;
2201 int i;
2202
2203 for (i = 0; (attr = modinfo_attrs[i]); i++) {
2204 if (attr->free)
2205 attr->free(mod);
2206 }
2207}
2208
2209#ifdef CONFIG_KALLSYMS
2210
2211
2212static const struct kernel_symbol *lookup_symbol(const char *name,
2213 const struct kernel_symbol *start,
2214 const struct kernel_symbol *stop)
2215{
2216 return bsearch(name, start, stop - start,
2217 sizeof(struct kernel_symbol), cmp_name);
2218}
2219
2220static int is_exported(const char *name, unsigned long value,
2221 const struct module *mod)
2222{
2223 const struct kernel_symbol *ks;
2224 if (!mod)
2225 ks = lookup_symbol(name, __start___ksymtab, __stop___ksymtab);
2226 else
2227 ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms);
2228 return ks != NULL && ks->value == value;
2229}
2230
2231
2232static char elf_type(const Elf_Sym *sym, const struct load_info *info)
2233{
2234 const Elf_Shdr *sechdrs = info->sechdrs;
2235
2236 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) {
2237 if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT)
2238 return 'v';
2239 else
2240 return 'w';
2241 }
2242 if (sym->st_shndx == SHN_UNDEF)
2243 return 'U';
2244 if (sym->st_shndx == SHN_ABS)
2245 return 'a';
2246 if (sym->st_shndx >= SHN_LORESERVE)
2247 return '?';
2248 if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR)
2249 return 't';
2250 if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC
2251 && sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) {
2252 if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE))
2253 return 'r';
2254 else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
2255 return 'g';
2256 else
2257 return 'd';
2258 }
2259 if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) {
2260 if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
2261 return 's';
2262 else
2263 return 'b';
2264 }
2265 if (strstarts(info->secstrings + sechdrs[sym->st_shndx].sh_name,
2266 ".debug")) {
2267 return 'n';
2268 }
2269 return '?';
2270}
2271
2272static bool is_core_symbol(const Elf_Sym *src, const Elf_Shdr *sechdrs,
2273 unsigned int shnum)
2274{
2275 const Elf_Shdr *sec;
2276
2277 if (src->st_shndx == SHN_UNDEF
2278 || src->st_shndx >= shnum
2279 || !src->st_name)
2280 return false;
2281
2282 sec = sechdrs + src->st_shndx;
2283 if (!(sec->sh_flags & SHF_ALLOC)
2284#ifndef CONFIG_KALLSYMS_ALL
2285 || !(sec->sh_flags & SHF_EXECINSTR)
2286#endif
2287 || (sec->sh_entsize & INIT_OFFSET_MASK))
2288 return false;
2289
2290 return true;
2291}
2292
2293
2294
2295
2296
2297
2298
2299
2300static void layout_symtab(struct module *mod, struct load_info *info)
2301{
2302 Elf_Shdr *symsect = info->sechdrs + info->index.sym;
2303 Elf_Shdr *strsect = info->sechdrs + info->index.str;
2304 const Elf_Sym *src;
2305 unsigned int i, nsrc, ndst, strtab_size;
2306
2307
2308 symsect->sh_flags |= SHF_ALLOC;
2309 symsect->sh_entsize = get_offset(mod, &mod->init_size, symsect,
2310 info->index.sym) | INIT_OFFSET_MASK;
2311 pr_debug("\t%s\n", info->secstrings + symsect->sh_name);
2312
2313 src = (void *)info->hdr + symsect->sh_offset;
2314 nsrc = symsect->sh_size / sizeof(*src);
2315
2316
2317 strtab_size = 1;
2318
2319
2320 for (ndst = i = 0; i < nsrc; i++) {
2321 if (i == 0 ||
2322 is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
2323 strtab_size += strlen(&info->strtab[src[i].st_name])+1;
2324 ndst++;
2325 }
2326 }
2327
2328
2329 info->symoffs = ALIGN(mod->core_size, symsect->sh_addralign ?: 1);
2330 info->stroffs = mod->core_size = info->symoffs + ndst * sizeof(Elf_Sym);
2331 mod->core_size += strtab_size;
2332
2333
2334 strsect->sh_flags |= SHF_ALLOC;
2335 strsect->sh_entsize = get_offset(mod, &mod->init_size, strsect,
2336 info->index.str) | INIT_OFFSET_MASK;
2337 pr_debug("\t%s\n", info->secstrings + strsect->sh_name);
2338}
2339
2340static void add_kallsyms(struct module *mod, const struct load_info *info)
2341{
2342 unsigned int i, ndst;
2343 const Elf_Sym *src;
2344 Elf_Sym *dst;
2345 char *s;
2346 Elf_Shdr *symsec = &info->sechdrs[info->index.sym];
2347
2348 mod->symtab = (void *)symsec->sh_addr;
2349 mod->num_symtab = symsec->sh_size / sizeof(Elf_Sym);
2350
2351 mod->strtab = (void *)info->sechdrs[info->index.str].sh_addr;
2352
2353
2354 for (i = 0; i < mod->num_symtab; i++)
2355 mod->symtab[i].st_info = elf_type(&mod->symtab[i], info);
2356
2357 mod->core_symtab = dst = mod->module_core + info->symoffs;
2358 mod->core_strtab = s = mod->module_core + info->stroffs;
2359 src = mod->symtab;
2360 *s++ = 0;
2361 for (ndst = i = 0; i < mod->num_symtab; i++) {
2362 if (i == 0 ||
2363 is_core_symbol(src+i, info->sechdrs, info->hdr->e_shnum)) {
2364 dst[ndst] = src[i];
2365 dst[ndst++].st_name = s - mod->core_strtab;
2366 s += strlcpy(s, &mod->strtab[src[i].st_name],
2367 KSYM_NAME_LEN) + 1;
2368 }
2369 }
2370 mod->core_num_syms = ndst;
2371}
2372#else
2373static inline void layout_symtab(struct module *mod, struct load_info *info)
2374{
2375}
2376
2377static void add_kallsyms(struct module *mod, const struct load_info *info)
2378{
2379}
2380#endif
2381
2382static void dynamic_debug_setup(struct _ddebug *debug, unsigned int num)
2383{
2384 if (!debug)
2385 return;
2386#ifdef CONFIG_DYNAMIC_DEBUG
2387 if (ddebug_add_module(debug, num, debug->modname))
2388 printk(KERN_ERR "dynamic debug error adding module: %s\n",
2389 debug->modname);
2390#endif
2391}
2392
2393static void dynamic_debug_remove(struct _ddebug *debug)
2394{
2395 if (debug)
2396 ddebug_remove_module(debug->modname);
2397}
2398
2399void * __weak module_alloc(unsigned long size)
2400{
2401 return size == 0 ? NULL : vmalloc_exec(size);
2402}
2403
2404static void *module_alloc_update_bounds(unsigned long size)
2405{
2406 void *ret = module_alloc(size);
2407
2408 if (ret) {
2409 mutex_lock(&module_mutex);
2410
2411 if ((unsigned long)ret < module_addr_min)
2412 module_addr_min = (unsigned long)ret;
2413 if ((unsigned long)ret + size > module_addr_max)
2414 module_addr_max = (unsigned long)ret + size;
2415 mutex_unlock(&module_mutex);
2416 }
2417 return ret;
2418}
2419
2420#ifdef CONFIG_DEBUG_KMEMLEAK
2421static void kmemleak_load_module(const struct module *mod,
2422 const struct load_info *info)
2423{
2424 unsigned int i;
2425
2426
2427 kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL);
2428
2429 for (i = 1; i < info->hdr->e_shnum; i++) {
2430 const char *name = info->secstrings + info->sechdrs[i].sh_name;
2431 if (!(info->sechdrs[i].sh_flags & SHF_ALLOC))
2432 continue;
2433 if (!strstarts(name, ".data") && !strstarts(name, ".bss"))
2434 continue;
2435
2436 kmemleak_scan_area((void *)info->sechdrs[i].sh_addr,
2437 info->sechdrs[i].sh_size, GFP_KERNEL);
2438 }
2439}
2440#else
2441static inline void kmemleak_load_module(const struct module *mod,
2442 const struct load_info *info)
2443{
2444}
2445#endif
2446
2447#ifdef CONFIG_MODULE_SIG
2448static int module_sig_check(struct load_info *info,
2449 const void *mod, unsigned long *_len)
2450{
2451 int err = -ENOKEY;
2452 unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1;
2453 unsigned long len = *_len;
2454
2455 if (len > markerlen &&
2456 memcmp(mod + len - markerlen, MODULE_SIG_STRING, markerlen) == 0) {
2457
2458 *_len -= markerlen;
2459 err = mod_verify_sig(mod, _len);
2460 }
2461
2462 if (!err) {
2463 info->sig_ok = true;
2464 return 0;
2465 }
2466
2467
2468 if (err < 0 && fips_enabled)
2469 panic("Module verification failed with error %d in FIPS mode\n",
2470 err);
2471 if (err == -ENOKEY && !sig_enforce)
2472 err = 0;
2473
2474 return err;
2475}
2476#else
2477static int module_sig_check(struct load_info *info,
2478 void *mod, unsigned long *len)
2479{
2480 return 0;
2481}
2482#endif
2483
2484
2485static int copy_and_check(struct load_info *info,
2486 const void __user *umod, unsigned long len,
2487 const char __user *uargs)
2488{
2489 int err;
2490 Elf_Ehdr *hdr;
2491
2492 if (len < sizeof(*hdr))
2493 return -ENOEXEC;
2494
2495
2496 if ((hdr = vmalloc(len)) == NULL)
2497 return -ENOMEM;
2498
2499 if (copy_from_user(hdr, umod, len) != 0) {
2500 err = -EFAULT;
2501 goto free_hdr;
2502 }
2503
2504 err = module_sig_check(info, hdr, &len);
2505 if (err)
2506 goto free_hdr;
2507
2508
2509
2510 if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0
2511 || hdr->e_type != ET_REL
2512 || !elf_check_arch(hdr)
2513 || hdr->e_shentsize != sizeof(Elf_Shdr)) {
2514 err = -ENOEXEC;
2515 goto free_hdr;
2516 }
2517
2518 if (hdr->e_shoff >= len ||
2519 hdr->e_shnum * sizeof(Elf_Shdr) > len - hdr->e_shoff) {
2520 err = -ENOEXEC;
2521 goto free_hdr;
2522 }
2523
2524 info->hdr = hdr;
2525 info->len = len;
2526 return 0;
2527
2528free_hdr:
2529 vfree(hdr);
2530 return err;
2531}
2532
2533static void free_copy(struct load_info *info)
2534{
2535 vfree(info->hdr);
2536}
2537
2538static int rewrite_section_headers(struct load_info *info)
2539{
2540 unsigned int i;
2541
2542
2543 info->sechdrs[0].sh_addr = 0;
2544
2545 for (i = 1; i < info->hdr->e_shnum; i++) {
2546 Elf_Shdr *shdr = &info->sechdrs[i];
2547 if (shdr->sh_type != SHT_NOBITS
2548 && info->len < shdr->sh_offset + shdr->sh_size) {
2549 printk(KERN_ERR "Module len %lu truncated\n",
2550 info->len);
2551 return -ENOEXEC;
2552 }
2553
2554
2555
2556 shdr->sh_addr = (size_t)info->hdr + shdr->sh_offset;
2557
2558#ifndef CONFIG_MODULE_UNLOAD
2559
2560 if (strstarts(info->secstrings+shdr->sh_name, ".exit"))
2561 shdr->sh_flags &= ~(unsigned long)SHF_ALLOC;
2562#endif
2563 }
2564
2565
2566 info->index.vers = find_sec(info, "__versions");
2567 info->index.info = find_sec(info, ".modinfo");
2568 info->sechdrs[info->index.info].sh_flags &= ~(unsigned long)SHF_ALLOC;
2569 info->sechdrs[info->index.vers].sh_flags &= ~(unsigned long)SHF_ALLOC;
2570 return 0;
2571}
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581static struct module *setup_load_info(struct load_info *info)
2582{
2583 unsigned int i;
2584 int err;
2585 struct module *mod;
2586
2587
2588 info->sechdrs = (void *)info->hdr + info->hdr->e_shoff;
2589 info->secstrings = (void *)info->hdr
2590 + info->sechdrs[info->hdr->e_shstrndx].sh_offset;
2591
2592 err = rewrite_section_headers(info);
2593 if (err)
2594 return ERR_PTR(err);
2595
2596
2597 for (i = 1; i < info->hdr->e_shnum; i++) {
2598 if (info->sechdrs[i].sh_type == SHT_SYMTAB) {
2599 info->index.sym = i;
2600 info->index.str = info->sechdrs[i].sh_link;
2601 info->strtab = (char *)info->hdr
2602 + info->sechdrs[info->index.str].sh_offset;
2603 break;
2604 }
2605 }
2606
2607 info->index.mod = find_sec(info, ".gnu.linkonce.this_module");
2608 if (!info->index.mod) {
2609 printk(KERN_WARNING "No module found in object\n");
2610 return ERR_PTR(-ENOEXEC);
2611 }
2612
2613 mod = (void *)info->sechdrs[info->index.mod].sh_addr;
2614
2615 if (info->index.sym == 0) {
2616 printk(KERN_WARNING "%s: module has no symbols (stripped?)\n",
2617 mod->name);
2618 return ERR_PTR(-ENOEXEC);
2619 }
2620
2621 info->index.pcpu = find_pcpusec(info);
2622
2623
2624 if (!check_modstruct_version(info->sechdrs, info->index.vers, mod))
2625 return ERR_PTR(-ENOEXEC);
2626
2627 return mod;
2628}
2629
2630static int check_modinfo(struct module *mod, struct load_info *info)
2631{
2632 const char *modmagic = get_modinfo(info, "vermagic");
2633 int err;
2634
2635
2636 if (!modmagic) {
2637 err = try_to_force_load(mod, "bad vermagic");
2638 if (err)
2639 return err;
2640 } else if (!same_magic(modmagic, vermagic, info->index.vers)) {
2641 printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",
2642 mod->name, modmagic, vermagic);
2643 return -ENOEXEC;
2644 }
2645
2646 if (!get_modinfo(info, "intree"))
2647 add_taint_module(mod, TAINT_OOT_MODULE);
2648
2649 if (get_modinfo(info, "staging")) {
2650 add_taint_module(mod, TAINT_CRAP);
2651 printk(KERN_WARNING "%s: module is from the staging directory,"
2652 " the quality is unknown, you have been warned.\n",
2653 mod->name);
2654 }
2655
2656
2657 set_license(mod, get_modinfo(info, "license"));
2658
2659 return 0;
2660}
2661
2662static void find_module_sections(struct module *mod, struct load_info *info)
2663{
2664 mod->kp = section_objs(info, "__param",
2665 sizeof(*mod->kp), &mod->num_kp);
2666 mod->syms = section_objs(info, "__ksymtab",
2667 sizeof(*mod->syms), &mod->num_syms);
2668 mod->crcs = section_addr(info, "__kcrctab");
2669 mod->gpl_syms = section_objs(info, "__ksymtab_gpl",
2670 sizeof(*mod->gpl_syms),
2671 &mod->num_gpl_syms);
2672 mod->gpl_crcs = section_addr(info, "__kcrctab_gpl");
2673 mod->gpl_future_syms = section_objs(info,
2674 "__ksymtab_gpl_future",
2675 sizeof(*mod->gpl_future_syms),
2676 &mod->num_gpl_future_syms);
2677 mod->gpl_future_crcs = section_addr(info, "__kcrctab_gpl_future");
2678
2679#ifdef CONFIG_UNUSED_SYMBOLS
2680 mod->unused_syms = section_objs(info, "__ksymtab_unused",
2681 sizeof(*mod->unused_syms),
2682 &mod->num_unused_syms);
2683 mod->unused_crcs = section_addr(info, "__kcrctab_unused");
2684 mod->unused_gpl_syms = section_objs(info, "__ksymtab_unused_gpl",
2685 sizeof(*mod->unused_gpl_syms),
2686 &mod->num_unused_gpl_syms);
2687 mod->unused_gpl_crcs = section_addr(info, "__kcrctab_unused_gpl");
2688#endif
2689#ifdef CONFIG_CONSTRUCTORS
2690 mod->ctors = section_objs(info, ".ctors",
2691 sizeof(*mod->ctors), &mod->num_ctors);
2692#endif
2693
2694#ifdef CONFIG_TRACEPOINTS
2695 mod->tracepoints_ptrs = section_objs(info, "__tracepoints_ptrs",
2696 sizeof(*mod->tracepoints_ptrs),
2697 &mod->num_tracepoints);
2698#endif
2699#ifdef HAVE_JUMP_LABEL
2700 mod->jump_entries = section_objs(info, "__jump_table",
2701 sizeof(*mod->jump_entries),
2702 &mod->num_jump_entries);
2703#endif
2704#ifdef CONFIG_EVENT_TRACING
2705 mod->trace_events = section_objs(info, "_ftrace_events",
2706 sizeof(*mod->trace_events),
2707 &mod->num_trace_events);
2708
2709
2710
2711
2712 kmemleak_scan_area(mod->trace_events, sizeof(*mod->trace_events) *
2713 mod->num_trace_events, GFP_KERNEL);
2714#endif
2715#ifdef CONFIG_TRACING
2716 mod->trace_bprintk_fmt_start = section_objs(info, "__trace_printk_fmt",
2717 sizeof(*mod->trace_bprintk_fmt_start),
2718 &mod->num_trace_bprintk_fmt);
2719
2720
2721
2722
2723 kmemleak_scan_area(mod->trace_bprintk_fmt_start,
2724 sizeof(*mod->trace_bprintk_fmt_start) *
2725 mod->num_trace_bprintk_fmt, GFP_KERNEL);
2726#endif
2727#ifdef CONFIG_FTRACE_MCOUNT_RECORD
2728
2729 mod->ftrace_callsites = section_objs(info, "__mcount_loc",
2730 sizeof(*mod->ftrace_callsites),
2731 &mod->num_ftrace_callsites);
2732#endif
2733
2734 mod->extable = section_objs(info, "__ex_table",
2735 sizeof(*mod->extable), &mod->num_exentries);
2736
2737 if (section_addr(info, "__obsparm"))
2738 printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
2739 mod->name);
2740
2741 info->debug = section_objs(info, "__verbose",
2742 sizeof(*info->debug), &info->num_debug);
2743}
2744
2745static int move_module(struct module *mod, struct load_info *info)
2746{
2747 int i;
2748 void *ptr;
2749
2750
2751 ptr = module_alloc_update_bounds(mod->core_size);
2752
2753
2754
2755
2756
2757 kmemleak_not_leak(ptr);
2758 if (!ptr)
2759 return -ENOMEM;
2760
2761 memset(ptr, 0, mod->core_size);
2762 mod->module_core = ptr;
2763
2764 ptr = module_alloc_update_bounds(mod->init_size);
2765
2766
2767
2768
2769
2770
2771 kmemleak_ignore(ptr);
2772 if (!ptr && mod->init_size) {
2773 module_free(mod, mod->module_core);
2774 return -ENOMEM;
2775 }
2776 memset(ptr, 0, mod->init_size);
2777 mod->module_init = ptr;
2778
2779
2780 pr_debug("final section addresses:\n");
2781 for (i = 0; i < info->hdr->e_shnum; i++) {
2782 void *dest;
2783 Elf_Shdr *shdr = &info->sechdrs[i];
2784
2785 if (!(shdr->sh_flags & SHF_ALLOC))
2786 continue;
2787
2788 if (shdr->sh_entsize & INIT_OFFSET_MASK)
2789 dest = mod->module_init
2790 + (shdr->sh_entsize & ~INIT_OFFSET_MASK);
2791 else
2792 dest = mod->module_core + shdr->sh_entsize;
2793
2794 if (shdr->sh_type != SHT_NOBITS)
2795 memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);
2796
2797 shdr->sh_addr = (unsigned long)dest;
2798 pr_debug("\t0x%lx %s\n",
2799 (long)shdr->sh_addr, info->secstrings + shdr->sh_name);
2800 }
2801
2802 return 0;
2803}
2804
2805static int check_module_license_and_versions(struct module *mod)
2806{
2807
2808
2809
2810
2811
2812 if (strcmp(mod->name, "ndiswrapper") == 0)
2813 add_taint(TAINT_PROPRIETARY_MODULE);
2814
2815
2816 if (strcmp(mod->name, "driverloader") == 0)
2817 add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
2818
2819
2820 if (strcmp(mod->name, "lve") == 0)
2821 add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
2822
2823#ifdef CONFIG_MODVERSIONS
2824 if ((mod->num_syms && !mod->crcs)
2825 || (mod->num_gpl_syms && !mod->gpl_crcs)
2826 || (mod->num_gpl_future_syms && !mod->gpl_future_crcs)
2827#ifdef CONFIG_UNUSED_SYMBOLS
2828 || (mod->num_unused_syms && !mod->unused_crcs)
2829 || (mod->num_unused_gpl_syms && !mod->unused_gpl_crcs)
2830#endif
2831 ) {
2832 return try_to_force_load(mod,
2833 "no versions for exported symbols");
2834 }
2835#endif
2836 return 0;
2837}
2838
2839static void flush_module_icache(const struct module *mod)
2840{
2841 mm_segment_t old_fs;
2842
2843
2844 old_fs = get_fs();
2845 set_fs(KERNEL_DS);
2846
2847
2848
2849
2850
2851
2852 if (mod->module_init)
2853 flush_icache_range((unsigned long)mod->module_init,
2854 (unsigned long)mod->module_init
2855 + mod->init_size);
2856 flush_icache_range((unsigned long)mod->module_core,
2857 (unsigned long)mod->module_core + mod->core_size);
2858
2859 set_fs(old_fs);
2860}
2861
2862int __weak module_frob_arch_sections(Elf_Ehdr *hdr,
2863 Elf_Shdr *sechdrs,
2864 char *secstrings,
2865 struct module *mod)
2866{
2867 return 0;
2868}
2869
2870static struct module *layout_and_allocate(struct load_info *info)
2871{
2872
2873 struct module *mod;
2874 Elf_Shdr *pcpusec;
2875 int err;
2876
2877 mod = setup_load_info(info);
2878 if (IS_ERR(mod))
2879 return mod;
2880
2881 err = check_modinfo(mod, info);
2882 if (err)
2883 return ERR_PTR(err);
2884
2885
2886 err = module_frob_arch_sections(info->hdr, info->sechdrs,
2887 info->secstrings, mod);
2888 if (err < 0)
2889 goto out;
2890
2891 pcpusec = &info->sechdrs[info->index.pcpu];
2892 if (pcpusec->sh_size) {
2893
2894 err = percpu_modalloc(mod,
2895 pcpusec->sh_size, pcpusec->sh_addralign);
2896 if (err)
2897 goto out;
2898 pcpusec->sh_flags &= ~(unsigned long)SHF_ALLOC;
2899 }
2900
2901
2902
2903
2904 layout_sections(mod, info);
2905 layout_symtab(mod, info);
2906
2907
2908 err = move_module(mod, info);
2909 if (err)
2910 goto free_percpu;
2911
2912
2913 mod = (void *)info->sechdrs[info->index.mod].sh_addr;
2914 kmemleak_load_module(mod, info);
2915 return mod;
2916
2917free_percpu:
2918 percpu_modfree(mod);
2919out:
2920 return ERR_PTR(err);
2921}
2922
2923
2924static void module_deallocate(struct module *mod, struct load_info *info)
2925{
2926 percpu_modfree(mod);
2927 module_free(mod, mod->module_init);
2928 module_free(mod, mod->module_core);
2929}
2930
2931int __weak module_finalize(const Elf_Ehdr *hdr,
2932 const Elf_Shdr *sechdrs,
2933 struct module *me)
2934{
2935 return 0;
2936}
2937
2938static int post_relocation(struct module *mod, const struct load_info *info)
2939{
2940
2941 sort_extable(mod->extable, mod->extable + mod->num_exentries);
2942
2943
2944 percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr,
2945 info->sechdrs[info->index.pcpu].sh_size);
2946
2947
2948 add_kallsyms(mod, info);
2949
2950
2951 return module_finalize(info->hdr, info->sechdrs, mod);
2952}
2953
2954
2955static bool finished_loading(const char *name)
2956{
2957 struct module *mod;
2958 bool ret;
2959
2960 mutex_lock(&module_mutex);
2961 mod = find_module_all(name, true);
2962 ret = !mod || mod->state == MODULE_STATE_LIVE
2963 || mod->state == MODULE_STATE_GOING;
2964 mutex_unlock(&module_mutex);
2965
2966 return ret;
2967}
2968
2969
2970
2971static struct module *load_module(void __user *umod,
2972 unsigned long len,
2973 const char __user *uargs)
2974{
2975 struct load_info info = { NULL, };
2976 struct module *mod, *old;
2977 long err;
2978
2979 pr_debug("load_module: umod=%p, len=%lu, uargs=%p\n",
2980 umod, len, uargs);
2981
2982
2983 err = copy_and_check(&info, umod, len, uargs);
2984 if (err)
2985 return ERR_PTR(err);
2986
2987
2988 mod = layout_and_allocate(&info);
2989 if (IS_ERR(mod)) {
2990 err = PTR_ERR(mod);
2991 goto free_copy;
2992 }
2993
2994
2995
2996
2997
2998
2999 mod->state = MODULE_STATE_UNFORMED;
3000again:
3001 mutex_lock(&module_mutex);
3002 if ((old = find_module_all(mod->name, true)) != NULL) {
3003 if (old->state == MODULE_STATE_COMING
3004 || old->state == MODULE_STATE_UNFORMED) {
3005
3006 mutex_unlock(&module_mutex);
3007 err = wait_event_interruptible(module_wq,
3008 finished_loading(mod->name));
3009 if (err)
3010 goto free_module;
3011 goto again;
3012 }
3013 err = -EEXIST;
3014 mutex_unlock(&module_mutex);
3015 goto free_module;
3016 }
3017 list_add_rcu(&mod->list, &modules);
3018 mutex_unlock(&module_mutex);
3019
3020#ifdef CONFIG_MODULE_SIG
3021 mod->sig_ok = info.sig_ok;
3022 if (!mod->sig_ok)
3023 add_taint_module(mod, TAINT_FORCED_MODULE);
3024#endif
3025
3026
3027 err = module_unload_init(mod);
3028 if (err)
3029 goto unlink_mod;
3030
3031
3032
3033 find_module_sections(mod, &info);
3034
3035 err = check_module_license_and_versions(mod);
3036 if (err)
3037 goto free_unload;
3038
3039
3040 setup_modinfo(mod, &info);
3041
3042
3043 err = simplify_symbols(mod, &info);
3044 if (err < 0)
3045 goto free_modinfo;
3046
3047 err = apply_relocations(mod, &info);
3048 if (err < 0)
3049 goto free_modinfo;
3050
3051 err = post_relocation(mod, &info);
3052 if (err < 0)
3053 goto free_modinfo;
3054
3055 flush_module_icache(mod);
3056
3057
3058 mod->args = strndup_user(uargs, ~0UL >> 1);
3059 if (IS_ERR(mod->args)) {
3060 err = PTR_ERR(mod->args);
3061 goto free_arch_cleanup;
3062 }
3063
3064 dynamic_debug_setup(info.debug, info.num_debug);
3065
3066 mutex_lock(&module_mutex);
3067
3068 err = verify_export_symbols(mod);
3069 if (err < 0)
3070 goto ddebug_cleanup;
3071
3072
3073 module_bug_finalize(info.hdr, info.sechdrs, mod);
3074
3075
3076
3077 mod->state = MODULE_STATE_COMING;
3078
3079 mutex_unlock(&module_mutex);
3080
3081
3082 err = parse_args(mod->name, mod->args, mod->kp, mod->num_kp,
3083 -32768, 32767, &ddebug_dyndbg_module_param_cb);
3084 if (err < 0)
3085 goto bug_cleanup;
3086
3087
3088 err = mod_sysfs_setup(mod, &info, mod->kp, mod->num_kp);
3089 if (err < 0)
3090 goto bug_cleanup;
3091
3092
3093 free_copy(&info);
3094
3095
3096 trace_module_load(mod);
3097 return mod;
3098
3099 bug_cleanup:
3100
3101 mutex_lock(&module_mutex);
3102 module_bug_cleanup(mod);
3103 ddebug_cleanup:
3104 mutex_unlock(&module_mutex);
3105 dynamic_debug_remove(info.debug);
3106 synchronize_sched();
3107 kfree(mod->args);
3108 free_arch_cleanup:
3109 module_arch_cleanup(mod);
3110 free_modinfo:
3111 free_modinfo(mod);
3112 free_unload:
3113 module_unload_free(mod);
3114 unlink_mod:
3115 mutex_lock(&module_mutex);
3116
3117 list_del_rcu(&mod->list);
3118 wake_up_all(&module_wq);
3119 mutex_unlock(&module_mutex);
3120 free_module:
3121 module_deallocate(mod, &info);
3122 free_copy:
3123 free_copy(&info);
3124 return ERR_PTR(err);
3125}
3126
3127
3128static void do_mod_ctors(struct module *mod)
3129{
3130#ifdef CONFIG_CONSTRUCTORS
3131 unsigned long i;
3132
3133 for (i = 0; i < mod->num_ctors; i++)
3134 mod->ctors[i]();
3135#endif
3136}
3137
3138
3139SYSCALL_DEFINE3(init_module, void __user *, umod,
3140 unsigned long, len, const char __user *, uargs)
3141{
3142 struct module *mod;
3143 int ret = 0;
3144
3145
3146 if (!capable(CAP_SYS_MODULE) || modules_disabled)
3147 return -EPERM;
3148
3149
3150 mod = load_module(umod, len, uargs);
3151 if (IS_ERR(mod))
3152 return PTR_ERR(mod);
3153
3154 blocking_notifier_call_chain(&module_notify_list,
3155 MODULE_STATE_COMING, mod);
3156
3157
3158 set_section_ro_nx(mod->module_core,
3159 mod->core_text_size,
3160 mod->core_ro_size,
3161 mod->core_size);
3162
3163
3164 set_section_ro_nx(mod->module_init,
3165 mod->init_text_size,
3166 mod->init_ro_size,
3167 mod->init_size);
3168
3169 do_mod_ctors(mod);
3170
3171 if (mod->init != NULL)
3172 ret = do_one_initcall(mod->init);
3173 if (ret < 0) {
3174
3175
3176 mod->state = MODULE_STATE_GOING;
3177 synchronize_sched();
3178 module_put(mod);
3179 blocking_notifier_call_chain(&module_notify_list,
3180 MODULE_STATE_GOING, mod);
3181 free_module(mod);
3182 wake_up_all(&module_wq);
3183 return ret;
3184 }
3185 if (ret > 0) {
3186 printk(KERN_WARNING
3187"%s: '%s'->init suspiciously returned %d, it should follow 0/-E convention\n"
3188"%s: loading module anyway...\n",
3189 __func__, mod->name, ret,
3190 __func__);
3191 dump_stack();
3192 }
3193
3194
3195 mod->state = MODULE_STATE_LIVE;
3196 blocking_notifier_call_chain(&module_notify_list,
3197 MODULE_STATE_LIVE, mod);
3198
3199
3200 async_synchronize_full();
3201
3202 mutex_lock(&module_mutex);
3203
3204 module_put(mod);
3205 trim_init_extable(mod);
3206#ifdef CONFIG_KALLSYMS
3207 mod->num_symtab = mod->core_num_syms;
3208 mod->symtab = mod->core_symtab;
3209 mod->strtab = mod->core_strtab;
3210#endif
3211 unset_module_init_ro_nx(mod);
3212 module_free(mod, mod->module_init);
3213 mod->module_init = NULL;
3214 mod->init_size = 0;
3215 mod->init_ro_size = 0;
3216 mod->init_text_size = 0;
3217 mutex_unlock(&module_mutex);
3218 wake_up_all(&module_wq);
3219
3220 return 0;
3221}
3222
3223static inline int within(unsigned long addr, void *start, unsigned long size)
3224{
3225 return ((void *)addr >= start && (void *)addr < start + size);
3226}
3227
3228#ifdef CONFIG_KALLSYMS
3229
3230
3231
3232
3233static inline int is_arm_mapping_symbol(const char *str)
3234{
3235 return str[0] == '$' && strchr("atd", str[1])
3236 && (str[2] == '\0' || str[2] == '.');
3237}
3238
3239static const char *get_ksymbol(struct module *mod,
3240 unsigned long addr,
3241 unsigned long *size,
3242 unsigned long *offset)
3243{
3244 unsigned int i, best = 0;
3245 unsigned long nextval;
3246
3247
3248 if (within_module_init(addr, mod))
3249 nextval = (unsigned long)mod->module_init+mod->init_text_size;
3250 else
3251 nextval = (unsigned long)mod->module_core+mod->core_text_size;
3252
3253
3254
3255 for (i = 1; i < mod->num_symtab; i++) {
3256 if (mod->symtab[i].st_shndx == SHN_UNDEF)
3257 continue;
3258
3259
3260
3261 if (mod->symtab[i].st_value <= addr
3262 && mod->symtab[i].st_value > mod->symtab[best].st_value
3263 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
3264 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
3265 best = i;
3266 if (mod->symtab[i].st_value > addr
3267 && mod->symtab[i].st_value < nextval
3268 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
3269 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
3270 nextval = mod->symtab[i].st_value;
3271 }
3272
3273 if (!best)
3274 return NULL;
3275
3276 if (size)
3277 *size = nextval - mod->symtab[best].st_value;
3278 if (offset)
3279 *offset = addr - mod->symtab[best].st_value;
3280 return mod->strtab + mod->symtab[best].st_name;
3281}
3282
3283
3284
3285const char *module_address_lookup(unsigned long addr,
3286 unsigned long *size,
3287 unsigned long *offset,
3288 char **modname,
3289 char *namebuf)
3290{
3291 struct module *mod;
3292 const char *ret = NULL;
3293
3294 preempt_disable();
3295 list_for_each_entry_rcu(mod, &modules, list) {
3296 if (mod->state == MODULE_STATE_UNFORMED)
3297 continue;
3298 if (within_module_init(addr, mod) ||
3299 within_module_core(addr, mod)) {
3300 if (modname)
3301 *modname = mod->name;
3302 ret = get_ksymbol(mod, addr, size, offset);
3303 break;
3304 }
3305 }
3306
3307 if (ret) {
3308 strncpy(namebuf, ret, KSYM_NAME_LEN - 1);
3309 ret = namebuf;
3310 }
3311 preempt_enable();
3312 return ret;
3313}
3314
3315int lookup_module_symbol_name(unsigned long addr, char *symname)
3316{
3317 struct module *mod;
3318
3319 preempt_disable();
3320 list_for_each_entry_rcu(mod, &modules, list) {
3321 if (mod->state == MODULE_STATE_UNFORMED)
3322 continue;
3323 if (within_module_init(addr, mod) ||
3324 within_module_core(addr, mod)) {
3325 const char *sym;
3326
3327 sym = get_ksymbol(mod, addr, NULL, NULL);
3328 if (!sym)
3329 goto out;
3330 strlcpy(symname, sym, KSYM_NAME_LEN);
3331 preempt_enable();
3332 return 0;
3333 }
3334 }
3335out:
3336 preempt_enable();
3337 return -ERANGE;
3338}
3339
3340int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size,
3341 unsigned long *offset, char *modname, char *name)
3342{
3343 struct module *mod;
3344
3345 preempt_disable();
3346 list_for_each_entry_rcu(mod, &modules, list) {
3347 if (mod->state == MODULE_STATE_UNFORMED)
3348 continue;
3349 if (within_module_init(addr, mod) ||
3350 within_module_core(addr, mod)) {
3351 const char *sym;
3352
3353 sym = get_ksymbol(mod, addr, size, offset);
3354 if (!sym)
3355 goto out;
3356 if (modname)
3357 strlcpy(modname, mod->name, MODULE_NAME_LEN);
3358 if (name)
3359 strlcpy(name, sym, KSYM_NAME_LEN);
3360 preempt_enable();
3361 return 0;
3362 }
3363 }
3364out:
3365 preempt_enable();
3366 return -ERANGE;
3367}
3368
3369int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
3370 char *name, char *module_name, int *exported)
3371{
3372 struct module *mod;
3373
3374 preempt_disable();
3375 list_for_each_entry_rcu(mod, &modules, list) {
3376 if (mod->state == MODULE_STATE_UNFORMED)
3377 continue;
3378 if (symnum < mod->num_symtab) {
3379 *value = mod->symtab[symnum].st_value;
3380 *type = mod->symtab[symnum].st_info;
3381 strlcpy(name, mod->strtab + mod->symtab[symnum].st_name,
3382 KSYM_NAME_LEN);
3383 strlcpy(module_name, mod->name, MODULE_NAME_LEN);
3384 *exported = is_exported(name, *value, mod);
3385 preempt_enable();
3386 return 0;
3387 }
3388 symnum -= mod->num_symtab;
3389 }
3390 preempt_enable();
3391 return -ERANGE;
3392}
3393
3394static unsigned long mod_find_symname(struct module *mod, const char *name)
3395{
3396 unsigned int i;
3397
3398 for (i = 0; i < mod->num_symtab; i++)
3399 if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 &&
3400 mod->symtab[i].st_info != 'U')
3401 return mod->symtab[i].st_value;
3402 return 0;
3403}
3404
3405
3406unsigned long module_kallsyms_lookup_name(const char *name)
3407{
3408 struct module *mod;
3409 char *colon;
3410 unsigned long ret = 0;
3411
3412
3413 preempt_disable();
3414 if ((colon = strchr(name, ':')) != NULL) {
3415 *colon = '\0';
3416 if ((mod = find_module(name)) != NULL)
3417 ret = mod_find_symname(mod, colon+1);
3418 *colon = ':';
3419 } else {
3420 list_for_each_entry_rcu(mod, &modules, list) {
3421 if (mod->state == MODULE_STATE_UNFORMED)
3422 continue;
3423 if ((ret = mod_find_symname(mod, name)) != 0)
3424 break;
3425 }
3426 }
3427 preempt_enable();
3428 return ret;
3429}
3430
3431int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
3432 struct module *, unsigned long),
3433 void *data)
3434{
3435 struct module *mod;
3436 unsigned int i;
3437 int ret;
3438
3439 list_for_each_entry(mod, &modules, list) {
3440 if (mod->state == MODULE_STATE_UNFORMED)
3441 continue;
3442 for (i = 0; i < mod->num_symtab; i++) {
3443 ret = fn(data, mod->strtab + mod->symtab[i].st_name,
3444 mod, mod->symtab[i].st_value);
3445 if (ret != 0)
3446 return ret;
3447 }
3448 }
3449 return 0;
3450}
3451#endif
3452
3453static char *module_flags(struct module *mod, char *buf)
3454{
3455 int bx = 0;
3456
3457 BUG_ON(mod->state == MODULE_STATE_UNFORMED);
3458 if (mod->taints ||
3459 mod->state == MODULE_STATE_GOING ||
3460 mod->state == MODULE_STATE_COMING) {
3461 buf[bx++] = '(';
3462 bx += module_flags_taint(mod, buf + bx);
3463
3464 if (mod->state == MODULE_STATE_GOING)
3465 buf[bx++] = '-';
3466
3467 if (mod->state == MODULE_STATE_COMING)
3468 buf[bx++] = '+';
3469 buf[bx++] = ')';
3470 }
3471 buf[bx] = '\0';
3472
3473 return buf;
3474}
3475
3476#ifdef CONFIG_PROC_FS
3477
3478static void *m_start(struct seq_file *m, loff_t *pos)
3479{
3480 mutex_lock(&module_mutex);
3481 return seq_list_start(&modules, *pos);
3482}
3483
3484static void *m_next(struct seq_file *m, void *p, loff_t *pos)
3485{
3486 return seq_list_next(p, &modules, pos);
3487}
3488
3489static void m_stop(struct seq_file *m, void *p)
3490{
3491 mutex_unlock(&module_mutex);
3492}
3493
3494static int m_show(struct seq_file *m, void *p)
3495{
3496 struct module *mod = list_entry(p, struct module, list);
3497 char buf[8];
3498
3499
3500 if (mod->state == MODULE_STATE_UNFORMED)
3501 return 0;
3502
3503 seq_printf(m, "%s %u",
3504 mod->name, mod->init_size + mod->core_size);
3505 print_unload_info(m, mod);
3506
3507
3508 seq_printf(m, " %s",
3509 mod->state == MODULE_STATE_GOING ? "Unloading":
3510 mod->state == MODULE_STATE_COMING ? "Loading":
3511 "Live");
3512
3513 seq_printf(m, " 0x%pK", mod->module_core);
3514
3515
3516 if (mod->taints)
3517 seq_printf(m, " %s", module_flags(mod, buf));
3518
3519 seq_printf(m, "\n");
3520 return 0;
3521}
3522
3523
3524
3525
3526
3527
3528static const struct seq_operations modules_op = {
3529 .start = m_start,
3530 .next = m_next,
3531 .stop = m_stop,
3532 .show = m_show
3533};
3534
3535static int modules_open(struct inode *inode, struct file *file)
3536{
3537 return seq_open(file, &modules_op);
3538}
3539
3540static const struct file_operations proc_modules_operations = {
3541 .open = modules_open,
3542 .read = seq_read,
3543 .llseek = seq_lseek,
3544 .release = seq_release,
3545};
3546
3547static int __init proc_modules_init(void)
3548{
3549 proc_create("modules", 0, NULL, &proc_modules_operations);
3550 return 0;
3551}
3552module_init(proc_modules_init);
3553#endif
3554
3555
3556const struct exception_table_entry *search_module_extables(unsigned long addr)
3557{
3558 const struct exception_table_entry *e = NULL;
3559 struct module *mod;
3560
3561 preempt_disable();
3562 list_for_each_entry_rcu(mod, &modules, list) {
3563 if (mod->state == MODULE_STATE_UNFORMED)
3564 continue;
3565 if (mod->num_exentries == 0)
3566 continue;
3567
3568 e = search_extable(mod->extable,
3569 mod->extable + mod->num_exentries - 1,
3570 addr);
3571 if (e)
3572 break;
3573 }
3574 preempt_enable();
3575
3576
3577
3578 return e;
3579}
3580
3581
3582
3583
3584
3585
3586
3587
3588bool is_module_address(unsigned long addr)
3589{
3590 bool ret;
3591
3592 preempt_disable();
3593 ret = __module_address(addr) != NULL;
3594 preempt_enable();
3595
3596 return ret;
3597}
3598
3599
3600
3601
3602
3603
3604
3605
3606struct module *__module_address(unsigned long addr)
3607{
3608 struct module *mod;
3609
3610 if (addr < module_addr_min || addr > module_addr_max)
3611 return NULL;
3612
3613 list_for_each_entry_rcu(mod, &modules, list) {
3614 if (mod->state == MODULE_STATE_UNFORMED)
3615 continue;
3616 if (within_module_core(addr, mod)
3617 || within_module_init(addr, mod))
3618 return mod;
3619 }
3620 return NULL;
3621}
3622EXPORT_SYMBOL_GPL(__module_address);
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632bool is_module_text_address(unsigned long addr)
3633{
3634 bool ret;
3635
3636 preempt_disable();
3637 ret = __module_text_address(addr) != NULL;
3638 preempt_enable();
3639
3640 return ret;
3641}
3642
3643
3644
3645
3646
3647
3648
3649
3650struct module *__module_text_address(unsigned long addr)
3651{
3652 struct module *mod = __module_address(addr);
3653 if (mod) {
3654
3655 if (!within(addr, mod->module_init, mod->init_text_size)
3656 && !within(addr, mod->module_core, mod->core_text_size))
3657 mod = NULL;
3658 }
3659 return mod;
3660}
3661EXPORT_SYMBOL_GPL(__module_text_address);
3662
3663
3664void print_modules(void)
3665{
3666 struct module *mod;
3667 char buf[8];
3668
3669 printk(KERN_DEFAULT "Modules linked in:");
3670
3671 preempt_disable();
3672 list_for_each_entry_rcu(mod, &modules, list) {
3673 if (mod->state == MODULE_STATE_UNFORMED)
3674 continue;
3675 printk(" %s%s", mod->name, module_flags(mod, buf));
3676 }
3677 preempt_enable();
3678 if (last_unloaded_module[0])
3679 printk(" [last unloaded: %s]", last_unloaded_module);
3680 printk("\n");
3681}
3682
3683#ifdef CONFIG_MODVERSIONS
3684
3685
3686void module_layout(struct module *mod,
3687 struct modversion_info *ver,
3688 struct kernel_param *kp,
3689 struct kernel_symbol *ks,
3690 struct tracepoint * const *tp)
3691{
3692}
3693EXPORT_SYMBOL(module_layout);
3694#endif
3695