Linux 2.6.17.7
[linux/fpc-iii.git] / kernel / module.c
blobbbe04862e1b09113dd12dd49749f551cd9fbeecf
1 /* Rewritten by Rusty Russell, on the backs of many others...
2 Copyright (C) 2002 Richard Henderson
3 Copyright (C) 2001 Rusty Russell, 2002 Rusty Russell IBM.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #include <linux/config.h>
20 #include <linux/module.h>
21 #include <linux/moduleloader.h>
22 #include <linux/init.h>
23 #include <linux/kernel.h>
24 #include <linux/slab.h>
25 #include <linux/vmalloc.h>
26 #include <linux/elf.h>
27 #include <linux/seq_file.h>
28 #include <linux/syscalls.h>
29 #include <linux/fcntl.h>
30 #include <linux/rcupdate.h>
31 #include <linux/capability.h>
32 #include <linux/cpu.h>
33 #include <linux/moduleparam.h>
34 #include <linux/errno.h>
35 #include <linux/err.h>
36 #include <linux/vermagic.h>
37 #include <linux/notifier.h>
38 #include <linux/stop_machine.h>
39 #include <linux/device.h>
40 #include <linux/string.h>
41 #include <linux/sched.h>
42 #include <linux/mutex.h>
43 #include <asm/uaccess.h>
44 #include <asm/semaphore.h>
45 #include <asm/cacheflush.h>
47 #if 0
48 #define DEBUGP printk
49 #else
50 #define DEBUGP(fmt , a...)
51 #endif
53 #ifndef ARCH_SHF_SMALL
54 #define ARCH_SHF_SMALL 0
55 #endif
57 /* If this is set, the section belongs in the init part of the module */
58 #define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
60 /* Protects module list */
61 static DEFINE_SPINLOCK(modlist_lock);
63 /* List of modules, protected by module_mutex AND modlist_lock */
64 static DEFINE_MUTEX(module_mutex);
65 static LIST_HEAD(modules);
67 static BLOCKING_NOTIFIER_HEAD(module_notify_list);
69 int register_module_notifier(struct notifier_block * nb)
71 return blocking_notifier_chain_register(&module_notify_list, nb);
73 EXPORT_SYMBOL(register_module_notifier);
75 int unregister_module_notifier(struct notifier_block * nb)
77 return blocking_notifier_chain_unregister(&module_notify_list, nb);
79 EXPORT_SYMBOL(unregister_module_notifier);
81 /* We require a truly strong try_module_get() */
82 static inline int strong_try_module_get(struct module *mod)
84 if (mod && mod->state == MODULE_STATE_COMING)
85 return 0;
86 return try_module_get(mod);
89 /* A thread that wants to hold a reference to a module only while it
90 * is running can call ths to safely exit.
91 * nfsd and lockd use this.
93 void __module_put_and_exit(struct module *mod, long code)
95 module_put(mod);
96 do_exit(code);
98 EXPORT_SYMBOL(__module_put_and_exit);
100 /* Find a module section: 0 means not found. */
101 static unsigned int find_sec(Elf_Ehdr *hdr,
102 Elf_Shdr *sechdrs,
103 const char *secstrings,
104 const char *name)
106 unsigned int i;
108 for (i = 1; i < hdr->e_shnum; i++)
109 /* Alloc bit cleared means "ignore it." */
110 if ((sechdrs[i].sh_flags & SHF_ALLOC)
111 && strcmp(secstrings+sechdrs[i].sh_name, name) == 0)
112 return i;
113 return 0;
116 /* Provided by the linker */
117 extern const struct kernel_symbol __start___ksymtab[];
118 extern const struct kernel_symbol __stop___ksymtab[];
119 extern const struct kernel_symbol __start___ksymtab_gpl[];
120 extern const struct kernel_symbol __stop___ksymtab_gpl[];
121 extern const struct kernel_symbol __start___ksymtab_gpl_future[];
122 extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
123 extern const unsigned long __start___kcrctab[];
124 extern const unsigned long __start___kcrctab_gpl[];
125 extern const unsigned long __start___kcrctab_gpl_future[];
127 #ifndef CONFIG_MODVERSIONS
128 #define symversion(base, idx) NULL
129 #else
130 #define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
131 #endif
133 /* lookup symbol in given range of kernel_symbols */
134 static const struct kernel_symbol *lookup_symbol(const char *name,
135 const struct kernel_symbol *start,
136 const struct kernel_symbol *stop)
138 const struct kernel_symbol *ks = start;
139 for (; ks < stop; ks++)
140 if (strcmp(ks->name, name) == 0)
141 return ks;
142 return NULL;
145 /* Find a symbol, return value, crc and module which owns it */
146 static unsigned long __find_symbol(const char *name,
147 struct module **owner,
148 const unsigned long **crc,
149 int gplok)
151 struct module *mod;
152 const struct kernel_symbol *ks;
154 /* Core kernel first. */
155 *owner = NULL;
156 ks = lookup_symbol(name, __start___ksymtab, __stop___ksymtab);
157 if (ks) {
158 *crc = symversion(__start___kcrctab, (ks - __start___ksymtab));
159 return ks->value;
161 if (gplok) {
162 ks = lookup_symbol(name, __start___ksymtab_gpl,
163 __stop___ksymtab_gpl);
164 if (ks) {
165 *crc = symversion(__start___kcrctab_gpl,
166 (ks - __start___ksymtab_gpl));
167 return ks->value;
170 ks = lookup_symbol(name, __start___ksymtab_gpl_future,
171 __stop___ksymtab_gpl_future);
172 if (ks) {
173 if (!gplok) {
174 printk(KERN_WARNING "Symbol %s is being used "
175 "by a non-GPL module, which will not "
176 "be allowed in the future\n", name);
177 printk(KERN_WARNING "Please see the file "
178 "Documentation/feature-removal-schedule.txt "
179 "in the kernel source tree for more "
180 "details.\n");
182 *crc = symversion(__start___kcrctab_gpl_future,
183 (ks - __start___ksymtab_gpl_future));
184 return ks->value;
187 /* Now try modules. */
188 list_for_each_entry(mod, &modules, list) {
189 *owner = mod;
190 ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms);
191 if (ks) {
192 *crc = symversion(mod->crcs, (ks - mod->syms));
193 return ks->value;
196 if (gplok) {
197 ks = lookup_symbol(name, mod->gpl_syms,
198 mod->gpl_syms + mod->num_gpl_syms);
199 if (ks) {
200 *crc = symversion(mod->gpl_crcs,
201 (ks - mod->gpl_syms));
202 return ks->value;
205 ks = lookup_symbol(name, mod->gpl_future_syms,
206 (mod->gpl_future_syms +
207 mod->num_gpl_future_syms));
208 if (ks) {
209 if (!gplok) {
210 printk(KERN_WARNING "Symbol %s is being used "
211 "by a non-GPL module, which will not "
212 "be allowed in the future\n", name);
213 printk(KERN_WARNING "Please see the file "
214 "Documentation/feature-removal-schedule.txt "
215 "in the kernel source tree for more "
216 "details.\n");
218 *crc = symversion(mod->gpl_future_crcs,
219 (ks - mod->gpl_future_syms));
220 return ks->value;
223 DEBUGP("Failed to find symbol %s\n", name);
224 return 0;
227 /* Search for module by name: must hold module_mutex. */
228 static struct module *find_module(const char *name)
230 struct module *mod;
232 list_for_each_entry(mod, &modules, list) {
233 if (strcmp(mod->name, name) == 0)
234 return mod;
236 return NULL;
239 #ifdef CONFIG_SMP
240 /* Number of blocks used and allocated. */
241 static unsigned int pcpu_num_used, pcpu_num_allocated;
242 /* Size of each block. -ve means used. */
243 static int *pcpu_size;
245 static int split_block(unsigned int i, unsigned short size)
247 /* Reallocation required? */
248 if (pcpu_num_used + 1 > pcpu_num_allocated) {
249 int *new = kmalloc(sizeof(new[0]) * pcpu_num_allocated*2,
250 GFP_KERNEL);
251 if (!new)
252 return 0;
254 memcpy(new, pcpu_size, sizeof(new[0])*pcpu_num_allocated);
255 pcpu_num_allocated *= 2;
256 kfree(pcpu_size);
257 pcpu_size = new;
260 /* Insert a new subblock */
261 memmove(&pcpu_size[i+1], &pcpu_size[i],
262 sizeof(pcpu_size[0]) * (pcpu_num_used - i));
263 pcpu_num_used++;
265 pcpu_size[i+1] -= size;
266 pcpu_size[i] = size;
267 return 1;
270 static inline unsigned int block_size(int val)
272 if (val < 0)
273 return -val;
274 return val;
277 /* Created by linker magic */
278 extern char __per_cpu_start[], __per_cpu_end[];
280 static void *percpu_modalloc(unsigned long size, unsigned long align,
281 const char *name)
283 unsigned long extra;
284 unsigned int i;
285 void *ptr;
287 if (align > SMP_CACHE_BYTES) {
288 printk(KERN_WARNING "%s: per-cpu alignment %li > %i\n",
289 name, align, SMP_CACHE_BYTES);
290 align = SMP_CACHE_BYTES;
293 ptr = __per_cpu_start;
294 for (i = 0; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
295 /* Extra for alignment requirement. */
296 extra = ALIGN((unsigned long)ptr, align) - (unsigned long)ptr;
297 BUG_ON(i == 0 && extra != 0);
299 if (pcpu_size[i] < 0 || pcpu_size[i] < extra + size)
300 continue;
302 /* Transfer extra to previous block. */
303 if (pcpu_size[i-1] < 0)
304 pcpu_size[i-1] -= extra;
305 else
306 pcpu_size[i-1] += extra;
307 pcpu_size[i] -= extra;
308 ptr += extra;
310 /* Split block if warranted */
311 if (pcpu_size[i] - size > sizeof(unsigned long))
312 if (!split_block(i, size))
313 return NULL;
315 /* Mark allocated */
316 pcpu_size[i] = -pcpu_size[i];
317 return ptr;
320 printk(KERN_WARNING "Could not allocate %lu bytes percpu data\n",
321 size);
322 return NULL;
325 static void percpu_modfree(void *freeme)
327 unsigned int i;
328 void *ptr = __per_cpu_start + block_size(pcpu_size[0]);
330 /* First entry is core kernel percpu data. */
331 for (i = 1; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
332 if (ptr == freeme) {
333 pcpu_size[i] = -pcpu_size[i];
334 goto free;
337 BUG();
339 free:
340 /* Merge with previous? */
341 if (pcpu_size[i-1] >= 0) {
342 pcpu_size[i-1] += pcpu_size[i];
343 pcpu_num_used--;
344 memmove(&pcpu_size[i], &pcpu_size[i+1],
345 (pcpu_num_used - i) * sizeof(pcpu_size[0]));
346 i--;
348 /* Merge with next? */
349 if (i+1 < pcpu_num_used && pcpu_size[i+1] >= 0) {
350 pcpu_size[i] += pcpu_size[i+1];
351 pcpu_num_used--;
352 memmove(&pcpu_size[i+1], &pcpu_size[i+2],
353 (pcpu_num_used - (i+1)) * sizeof(pcpu_size[0]));
357 static unsigned int find_pcpusec(Elf_Ehdr *hdr,
358 Elf_Shdr *sechdrs,
359 const char *secstrings)
361 return find_sec(hdr, sechdrs, secstrings, ".data.percpu");
364 static int percpu_modinit(void)
366 pcpu_num_used = 2;
367 pcpu_num_allocated = 2;
368 pcpu_size = kmalloc(sizeof(pcpu_size[0]) * pcpu_num_allocated,
369 GFP_KERNEL);
370 /* Static in-kernel percpu data (used). */
371 pcpu_size[0] = -ALIGN(__per_cpu_end-__per_cpu_start, SMP_CACHE_BYTES);
372 /* Free room. */
373 pcpu_size[1] = PERCPU_ENOUGH_ROOM + pcpu_size[0];
374 if (pcpu_size[1] < 0) {
375 printk(KERN_ERR "No per-cpu room for modules.\n");
376 pcpu_num_used = 1;
379 return 0;
381 __initcall(percpu_modinit);
382 #else /* ... !CONFIG_SMP */
383 static inline void *percpu_modalloc(unsigned long size, unsigned long align,
384 const char *name)
386 return NULL;
388 static inline void percpu_modfree(void *pcpuptr)
390 BUG();
392 static inline unsigned int find_pcpusec(Elf_Ehdr *hdr,
393 Elf_Shdr *sechdrs,
394 const char *secstrings)
396 return 0;
398 static inline void percpu_modcopy(void *pcpudst, const void *src,
399 unsigned long size)
401 /* pcpusec should be 0, and size of that section should be 0. */
402 BUG_ON(size != 0);
404 #endif /* CONFIG_SMP */
406 #define MODINFO_ATTR(field) \
407 static void setup_modinfo_##field(struct module *mod, const char *s) \
409 mod->field = kstrdup(s, GFP_KERNEL); \
411 static ssize_t show_modinfo_##field(struct module_attribute *mattr, \
412 struct module *mod, char *buffer) \
414 return sprintf(buffer, "%s\n", mod->field); \
416 static int modinfo_##field##_exists(struct module *mod) \
418 return mod->field != NULL; \
420 static void free_modinfo_##field(struct module *mod) \
422 kfree(mod->field); \
423 mod->field = NULL; \
425 static struct module_attribute modinfo_##field = { \
426 .attr = { .name = __stringify(field), .mode = 0444, \
427 .owner = THIS_MODULE }, \
428 .show = show_modinfo_##field, \
429 .setup = setup_modinfo_##field, \
430 .test = modinfo_##field##_exists, \
431 .free = free_modinfo_##field, \
434 MODINFO_ATTR(version);
435 MODINFO_ATTR(srcversion);
437 #ifdef CONFIG_MODULE_UNLOAD
438 /* Init the unload section of the module. */
439 static void module_unload_init(struct module *mod)
441 unsigned int i;
443 INIT_LIST_HEAD(&mod->modules_which_use_me);
444 for (i = 0; i < NR_CPUS; i++)
445 local_set(&mod->ref[i].count, 0);
446 /* Hold reference count during initialization. */
447 local_set(&mod->ref[raw_smp_processor_id()].count, 1);
448 /* Backwards compatibility macros put refcount during init. */
449 mod->waiter = current;
452 /* modules using other modules */
453 struct module_use
455 struct list_head list;
456 struct module *module_which_uses;
459 /* Does a already use b? */
460 static int already_uses(struct module *a, struct module *b)
462 struct module_use *use;
464 list_for_each_entry(use, &b->modules_which_use_me, list) {
465 if (use->module_which_uses == a) {
466 DEBUGP("%s uses %s!\n", a->name, b->name);
467 return 1;
470 DEBUGP("%s does not use %s!\n", a->name, b->name);
471 return 0;
474 /* Module a uses b */
475 static int use_module(struct module *a, struct module *b)
477 struct module_use *use;
478 if (b == NULL || already_uses(a, b)) return 1;
480 if (!strong_try_module_get(b))
481 return 0;
483 DEBUGP("Allocating new usage for %s.\n", a->name);
484 use = kmalloc(sizeof(*use), GFP_ATOMIC);
485 if (!use) {
486 printk("%s: out of memory loading\n", a->name);
487 module_put(b);
488 return 0;
491 use->module_which_uses = a;
492 list_add(&use->list, &b->modules_which_use_me);
493 return 1;
496 /* Clear the unload stuff of the module. */
497 static void module_unload_free(struct module *mod)
499 struct module *i;
501 list_for_each_entry(i, &modules, list) {
502 struct module_use *use;
504 list_for_each_entry(use, &i->modules_which_use_me, list) {
505 if (use->module_which_uses == mod) {
506 DEBUGP("%s unusing %s\n", mod->name, i->name);
507 module_put(i);
508 list_del(&use->list);
509 kfree(use);
510 /* There can be at most one match. */
511 break;
517 #ifdef CONFIG_MODULE_FORCE_UNLOAD
518 static inline int try_force_unload(unsigned int flags)
520 int ret = (flags & O_TRUNC);
521 if (ret)
522 add_taint(TAINT_FORCED_RMMOD);
523 return ret;
525 #else
526 static inline int try_force_unload(unsigned int flags)
528 return 0;
530 #endif /* CONFIG_MODULE_FORCE_UNLOAD */
532 struct stopref
534 struct module *mod;
535 int flags;
536 int *forced;
539 /* Whole machine is stopped with interrupts off when this runs. */
540 static int __try_stop_module(void *_sref)
542 struct stopref *sref = _sref;
544 /* If it's not unused, quit unless we are told to block. */
545 if ((sref->flags & O_NONBLOCK) && module_refcount(sref->mod) != 0) {
546 if (!(*sref->forced = try_force_unload(sref->flags)))
547 return -EWOULDBLOCK;
550 /* Mark it as dying. */
551 sref->mod->state = MODULE_STATE_GOING;
552 return 0;
555 static int try_stop_module(struct module *mod, int flags, int *forced)
557 struct stopref sref = { mod, flags, forced };
559 return stop_machine_run(__try_stop_module, &sref, NR_CPUS);
562 unsigned int module_refcount(struct module *mod)
564 unsigned int i, total = 0;
566 for (i = 0; i < NR_CPUS; i++)
567 total += local_read(&mod->ref[i].count);
568 return total;
570 EXPORT_SYMBOL(module_refcount);
572 /* This exists whether we can unload or not */
573 static void free_module(struct module *mod);
575 static void wait_for_zero_refcount(struct module *mod)
577 /* Since we might sleep for some time, drop the semaphore first */
578 mutex_unlock(&module_mutex);
579 for (;;) {
580 DEBUGP("Looking at refcount...\n");
581 set_current_state(TASK_UNINTERRUPTIBLE);
582 if (module_refcount(mod) == 0)
583 break;
584 schedule();
586 current->state = TASK_RUNNING;
587 mutex_lock(&module_mutex);
590 asmlinkage long
591 sys_delete_module(const char __user *name_user, unsigned int flags)
593 struct module *mod;
594 char name[MODULE_NAME_LEN];
595 int ret, forced = 0;
597 if (!capable(CAP_SYS_MODULE))
598 return -EPERM;
600 if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
601 return -EFAULT;
602 name[MODULE_NAME_LEN-1] = '\0';
604 if (mutex_lock_interruptible(&module_mutex) != 0)
605 return -EINTR;
607 mod = find_module(name);
608 if (!mod) {
609 ret = -ENOENT;
610 goto out;
613 if (!list_empty(&mod->modules_which_use_me)) {
614 /* Other modules depend on us: get rid of them first. */
615 ret = -EWOULDBLOCK;
616 goto out;
619 /* Doing init or already dying? */
620 if (mod->state != MODULE_STATE_LIVE) {
621 /* FIXME: if (force), slam module count and wake up
622 waiter --RR */
623 DEBUGP("%s already dying\n", mod->name);
624 ret = -EBUSY;
625 goto out;
628 /* If it has an init func, it must have an exit func to unload */
629 if ((mod->init != NULL && mod->exit == NULL)
630 || mod->unsafe) {
631 forced = try_force_unload(flags);
632 if (!forced) {
633 /* This module can't be removed */
634 ret = -EBUSY;
635 goto out;
639 /* Set this up before setting mod->state */
640 mod->waiter = current;
642 /* Stop the machine so refcounts can't move and disable module. */
643 ret = try_stop_module(mod, flags, &forced);
644 if (ret != 0)
645 goto out;
647 /* Never wait if forced. */
648 if (!forced && module_refcount(mod) != 0)
649 wait_for_zero_refcount(mod);
651 /* Final destruction now noone is using it. */
652 if (mod->exit != NULL) {
653 mutex_unlock(&module_mutex);
654 mod->exit();
655 mutex_lock(&module_mutex);
657 free_module(mod);
659 out:
660 mutex_unlock(&module_mutex);
661 return ret;
664 static void print_unload_info(struct seq_file *m, struct module *mod)
666 struct module_use *use;
667 int printed_something = 0;
669 seq_printf(m, " %u ", module_refcount(mod));
671 /* Always include a trailing , so userspace can differentiate
672 between this and the old multi-field proc format. */
673 list_for_each_entry(use, &mod->modules_which_use_me, list) {
674 printed_something = 1;
675 seq_printf(m, "%s,", use->module_which_uses->name);
678 if (mod->unsafe) {
679 printed_something = 1;
680 seq_printf(m, "[unsafe],");
683 if (mod->init != NULL && mod->exit == NULL) {
684 printed_something = 1;
685 seq_printf(m, "[permanent],");
688 if (!printed_something)
689 seq_printf(m, "-");
692 void __symbol_put(const char *symbol)
694 struct module *owner;
695 unsigned long flags;
696 const unsigned long *crc;
698 spin_lock_irqsave(&modlist_lock, flags);
699 if (!__find_symbol(symbol, &owner, &crc, 1))
700 BUG();
701 module_put(owner);
702 spin_unlock_irqrestore(&modlist_lock, flags);
704 EXPORT_SYMBOL(__symbol_put);
706 void symbol_put_addr(void *addr)
708 struct module *modaddr;
710 if (core_kernel_text((unsigned long)addr))
711 return;
713 if (!(modaddr = module_text_address((unsigned long)addr)))
714 BUG();
715 module_put(modaddr);
717 EXPORT_SYMBOL_GPL(symbol_put_addr);
719 static ssize_t show_refcnt(struct module_attribute *mattr,
720 struct module *mod, char *buffer)
722 /* sysfs holds a reference */
723 return sprintf(buffer, "%u\n", module_refcount(mod)-1);
726 static struct module_attribute refcnt = {
727 .attr = { .name = "refcnt", .mode = 0444, .owner = THIS_MODULE },
728 .show = show_refcnt,
731 #else /* !CONFIG_MODULE_UNLOAD */
732 static void print_unload_info(struct seq_file *m, struct module *mod)
734 /* We don't know the usage count, or what modules are using. */
735 seq_printf(m, " - -");
738 static inline void module_unload_free(struct module *mod)
742 static inline int use_module(struct module *a, struct module *b)
744 return strong_try_module_get(b);
747 static inline void module_unload_init(struct module *mod)
750 #endif /* CONFIG_MODULE_UNLOAD */
752 static struct module_attribute *modinfo_attrs[] = {
753 &modinfo_version,
754 &modinfo_srcversion,
755 #ifdef CONFIG_MODULE_UNLOAD
756 &refcnt,
757 #endif
758 NULL,
761 static const char vermagic[] = VERMAGIC_STRING;
763 #ifdef CONFIG_MODVERSIONS
764 static int check_version(Elf_Shdr *sechdrs,
765 unsigned int versindex,
766 const char *symname,
767 struct module *mod,
768 const unsigned long *crc)
770 unsigned int i, num_versions;
771 struct modversion_info *versions;
773 /* Exporting module didn't supply crcs? OK, we're already tainted. */
774 if (!crc)
775 return 1;
777 versions = (void *) sechdrs[versindex].sh_addr;
778 num_versions = sechdrs[versindex].sh_size
779 / sizeof(struct modversion_info);
781 for (i = 0; i < num_versions; i++) {
782 if (strcmp(versions[i].name, symname) != 0)
783 continue;
785 if (versions[i].crc == *crc)
786 return 1;
787 printk("%s: disagrees about version of symbol %s\n",
788 mod->name, symname);
789 DEBUGP("Found checksum %lX vs module %lX\n",
790 *crc, versions[i].crc);
791 return 0;
793 /* Not in module's version table. OK, but that taints the kernel. */
794 if (!(tainted & TAINT_FORCED_MODULE)) {
795 printk("%s: no version for \"%s\" found: kernel tainted.\n",
796 mod->name, symname);
797 add_taint(TAINT_FORCED_MODULE);
799 return 1;
802 static inline int check_modstruct_version(Elf_Shdr *sechdrs,
803 unsigned int versindex,
804 struct module *mod)
806 const unsigned long *crc;
807 struct module *owner;
809 if (!__find_symbol("struct_module", &owner, &crc, 1))
810 BUG();
811 return check_version(sechdrs, versindex, "struct_module", mod,
812 crc);
815 /* First part is kernel version, which we ignore. */
816 static inline int same_magic(const char *amagic, const char *bmagic)
818 amagic += strcspn(amagic, " ");
819 bmagic += strcspn(bmagic, " ");
820 return strcmp(amagic, bmagic) == 0;
822 #else
823 static inline int check_version(Elf_Shdr *sechdrs,
824 unsigned int versindex,
825 const char *symname,
826 struct module *mod,
827 const unsigned long *crc)
829 return 1;
832 static inline int check_modstruct_version(Elf_Shdr *sechdrs,
833 unsigned int versindex,
834 struct module *mod)
836 return 1;
839 static inline int same_magic(const char *amagic, const char *bmagic)
841 return strcmp(amagic, bmagic) == 0;
843 #endif /* CONFIG_MODVERSIONS */
845 /* Resolve a symbol for this module. I.e. if we find one, record usage.
846 Must be holding module_mutex. */
847 static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
848 unsigned int versindex,
849 const char *name,
850 struct module *mod)
852 struct module *owner;
853 unsigned long ret;
854 const unsigned long *crc;
856 ret = __find_symbol(name, &owner, &crc, mod->license_gplok);
857 if (ret) {
858 /* use_module can fail due to OOM, or module unloading */
859 if (!check_version(sechdrs, versindex, name, mod, crc) ||
860 !use_module(mod, owner))
861 ret = 0;
863 return ret;
868 * /sys/module/foo/sections stuff
869 * J. Corbet <corbet@lwn.net>
871 #ifdef CONFIG_KALLSYMS
872 static ssize_t module_sect_show(struct module_attribute *mattr,
873 struct module *mod, char *buf)
875 struct module_sect_attr *sattr =
876 container_of(mattr, struct module_sect_attr, mattr);
877 return sprintf(buf, "0x%lx\n", sattr->address);
880 static void add_sect_attrs(struct module *mod, unsigned int nsect,
881 char *secstrings, Elf_Shdr *sechdrs)
883 unsigned int nloaded = 0, i, size[2];
884 struct module_sect_attrs *sect_attrs;
885 struct module_sect_attr *sattr;
886 struct attribute **gattr;
888 /* Count loaded sections and allocate structures */
889 for (i = 0; i < nsect; i++)
890 if (sechdrs[i].sh_flags & SHF_ALLOC)
891 nloaded++;
892 size[0] = ALIGN(sizeof(*sect_attrs)
893 + nloaded * sizeof(sect_attrs->attrs[0]),
894 sizeof(sect_attrs->grp.attrs[0]));
895 size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]);
896 if (! (sect_attrs = kmalloc(size[0] + size[1], GFP_KERNEL)))
897 return;
899 /* Setup section attributes. */
900 sect_attrs->grp.name = "sections";
901 sect_attrs->grp.attrs = (void *)sect_attrs + size[0];
903 sattr = &sect_attrs->attrs[0];
904 gattr = &sect_attrs->grp.attrs[0];
905 for (i = 0; i < nsect; i++) {
906 if (! (sechdrs[i].sh_flags & SHF_ALLOC))
907 continue;
908 sattr->address = sechdrs[i].sh_addr;
909 strlcpy(sattr->name, secstrings + sechdrs[i].sh_name,
910 MODULE_SECT_NAME_LEN);
911 sattr->mattr.show = module_sect_show;
912 sattr->mattr.store = NULL;
913 sattr->mattr.attr.name = sattr->name;
914 sattr->mattr.attr.owner = mod;
915 sattr->mattr.attr.mode = S_IRUGO;
916 *(gattr++) = &(sattr++)->mattr.attr;
918 *gattr = NULL;
920 if (sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp))
921 goto out;
923 mod->sect_attrs = sect_attrs;
924 return;
925 out:
926 kfree(sect_attrs);
929 static void remove_sect_attrs(struct module *mod)
931 if (mod->sect_attrs) {
932 sysfs_remove_group(&mod->mkobj.kobj,
933 &mod->sect_attrs->grp);
934 /* We are positive that no one is using any sect attrs
935 * at this point. Deallocate immediately. */
936 kfree(mod->sect_attrs);
937 mod->sect_attrs = NULL;
942 #else
943 static inline void add_sect_attrs(struct module *mod, unsigned int nsect,
944 char *sectstrings, Elf_Shdr *sechdrs)
948 static inline void remove_sect_attrs(struct module *mod)
951 #endif /* CONFIG_KALLSYMS */
953 static int module_add_modinfo_attrs(struct module *mod)
955 struct module_attribute *attr;
956 struct module_attribute *temp_attr;
957 int error = 0;
958 int i;
960 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
961 (ARRAY_SIZE(modinfo_attrs) + 1)),
962 GFP_KERNEL);
963 if (!mod->modinfo_attrs)
964 return -ENOMEM;
966 temp_attr = mod->modinfo_attrs;
967 for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
968 if (!attr->test ||
969 (attr->test && attr->test(mod))) {
970 memcpy(temp_attr, attr, sizeof(*temp_attr));
971 temp_attr->attr.owner = mod;
972 error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr);
973 ++temp_attr;
976 return error;
979 static void module_remove_modinfo_attrs(struct module *mod)
981 struct module_attribute *attr;
982 int i;
984 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
985 /* pick a field to test for end of list */
986 if (!attr->attr.name)
987 break;
988 sysfs_remove_file(&mod->mkobj.kobj,&attr->attr);
989 if (attr->free)
990 attr->free(mod);
992 kfree(mod->modinfo_attrs);
995 static int mod_sysfs_setup(struct module *mod,
996 struct kernel_param *kparam,
997 unsigned int num_params)
999 int err;
1001 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj));
1002 err = kobject_set_name(&mod->mkobj.kobj, "%s", mod->name);
1003 if (err)
1004 goto out;
1005 kobj_set_kset_s(&mod->mkobj, module_subsys);
1006 mod->mkobj.mod = mod;
1007 err = kobject_register(&mod->mkobj.kobj);
1008 if (err)
1009 goto out;
1011 err = module_param_sysfs_setup(mod, kparam, num_params);
1012 if (err)
1013 goto out_unreg;
1015 err = module_add_modinfo_attrs(mod);
1016 if (err)
1017 goto out_unreg;
1019 return 0;
1021 out_unreg:
1022 kobject_unregister(&mod->mkobj.kobj);
1023 out:
1024 return err;
1027 static void mod_kobject_remove(struct module *mod)
1029 module_remove_modinfo_attrs(mod);
1030 module_param_sysfs_remove(mod);
1032 kobject_unregister(&mod->mkobj.kobj);
1036 * unlink the module with the whole machine is stopped with interrupts off
1037 * - this defends against kallsyms not taking locks
1039 static int __unlink_module(void *_mod)
1041 struct module *mod = _mod;
1042 list_del(&mod->list);
1043 return 0;
1046 /* Free a module, remove from lists, etc (must hold module mutex). */
1047 static void free_module(struct module *mod)
1049 /* Delete from various lists */
1050 stop_machine_run(__unlink_module, mod, NR_CPUS);
1051 remove_sect_attrs(mod);
1052 mod_kobject_remove(mod);
1054 /* Arch-specific cleanup. */
1055 module_arch_cleanup(mod);
1057 /* Module unload stuff */
1058 module_unload_free(mod);
1060 /* This may be NULL, but that's OK */
1061 module_free(mod, mod->module_init);
1062 kfree(mod->args);
1063 if (mod->percpu)
1064 percpu_modfree(mod->percpu);
1066 /* Finally, free the core (containing the module structure) */
1067 module_free(mod, mod->module_core);
1070 void *__symbol_get(const char *symbol)
1072 struct module *owner;
1073 unsigned long value, flags;
1074 const unsigned long *crc;
1076 spin_lock_irqsave(&modlist_lock, flags);
1077 value = __find_symbol(symbol, &owner, &crc, 1);
1078 if (value && !strong_try_module_get(owner))
1079 value = 0;
1080 spin_unlock_irqrestore(&modlist_lock, flags);
1082 return (void *)value;
1084 EXPORT_SYMBOL_GPL(__symbol_get);
1087 * Ensure that an exported symbol [global namespace] does not already exist
1088 * in the Kernel or in some other modules exported symbol table.
1090 static int verify_export_symbols(struct module *mod)
1092 const char *name = NULL;
1093 unsigned long i, ret = 0;
1094 struct module *owner;
1095 const unsigned long *crc;
1097 for (i = 0; i < mod->num_syms; i++)
1098 if (__find_symbol(mod->syms[i].name, &owner, &crc, 1)) {
1099 name = mod->syms[i].name;
1100 ret = -ENOEXEC;
1101 goto dup;
1104 for (i = 0; i < mod->num_gpl_syms; i++)
1105 if (__find_symbol(mod->gpl_syms[i].name, &owner, &crc, 1)) {
1106 name = mod->gpl_syms[i].name;
1107 ret = -ENOEXEC;
1108 goto dup;
1111 dup:
1112 if (ret)
1113 printk(KERN_ERR "%s: exports duplicate symbol %s (owned by %s)\n",
1114 mod->name, name, module_name(owner));
1116 return ret;
1119 /* Change all symbols so that sh_value encodes the pointer directly. */
1120 static int simplify_symbols(Elf_Shdr *sechdrs,
1121 unsigned int symindex,
1122 const char *strtab,
1123 unsigned int versindex,
1124 unsigned int pcpuindex,
1125 struct module *mod)
1127 Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
1128 unsigned long secbase;
1129 unsigned int i, n = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1130 int ret = 0;
1132 for (i = 1; i < n; i++) {
1133 switch (sym[i].st_shndx) {
1134 case SHN_COMMON:
1135 /* We compiled with -fno-common. These are not
1136 supposed to happen. */
1137 DEBUGP("Common symbol: %s\n", strtab + sym[i].st_name);
1138 printk("%s: please compile with -fno-common\n",
1139 mod->name);
1140 ret = -ENOEXEC;
1141 break;
1143 case SHN_ABS:
1144 /* Don't need to do anything */
1145 DEBUGP("Absolute symbol: 0x%08lx\n",
1146 (long)sym[i].st_value);
1147 break;
1149 case SHN_UNDEF:
1150 sym[i].st_value
1151 = resolve_symbol(sechdrs, versindex,
1152 strtab + sym[i].st_name, mod);
1154 /* Ok if resolved. */
1155 if (sym[i].st_value != 0)
1156 break;
1157 /* Ok if weak. */
1158 if (ELF_ST_BIND(sym[i].st_info) == STB_WEAK)
1159 break;
1161 printk(KERN_WARNING "%s: Unknown symbol %s\n",
1162 mod->name, strtab + sym[i].st_name);
1163 ret = -ENOENT;
1164 break;
1166 default:
1167 /* Divert to percpu allocation if a percpu var. */
1168 if (sym[i].st_shndx == pcpuindex)
1169 secbase = (unsigned long)mod->percpu;
1170 else
1171 secbase = sechdrs[sym[i].st_shndx].sh_addr;
1172 sym[i].st_value += secbase;
1173 break;
1177 return ret;
1180 /* Update size with this section: return offset. */
1181 static long get_offset(unsigned long *size, Elf_Shdr *sechdr)
1183 long ret;
1185 ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
1186 *size = ret + sechdr->sh_size;
1187 return ret;
1190 /* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
1191 might -- code, read-only data, read-write data, small data. Tally
1192 sizes, and place the offsets into sh_entsize fields: high bit means it
1193 belongs in init. */
1194 static void layout_sections(struct module *mod,
1195 const Elf_Ehdr *hdr,
1196 Elf_Shdr *sechdrs,
1197 const char *secstrings)
1199 static unsigned long const masks[][2] = {
1200 /* NOTE: all executable code must be the first section
1201 * in this array; otherwise modify the text_size
1202 * finder in the two loops below */
1203 { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
1204 { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
1205 { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
1206 { ARCH_SHF_SMALL | SHF_ALLOC, 0 }
1208 unsigned int m, i;
1210 for (i = 0; i < hdr->e_shnum; i++)
1211 sechdrs[i].sh_entsize = ~0UL;
1213 DEBUGP("Core section allocation order:\n");
1214 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1215 for (i = 0; i < hdr->e_shnum; ++i) {
1216 Elf_Shdr *s = &sechdrs[i];
1218 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1219 || (s->sh_flags & masks[m][1])
1220 || s->sh_entsize != ~0UL
1221 || strncmp(secstrings + s->sh_name,
1222 ".init", 5) == 0)
1223 continue;
1224 s->sh_entsize = get_offset(&mod->core_size, s);
1225 DEBUGP("\t%s\n", secstrings + s->sh_name);
1227 if (m == 0)
1228 mod->core_text_size = mod->core_size;
1231 DEBUGP("Init section allocation order:\n");
1232 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1233 for (i = 0; i < hdr->e_shnum; ++i) {
1234 Elf_Shdr *s = &sechdrs[i];
1236 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1237 || (s->sh_flags & masks[m][1])
1238 || s->sh_entsize != ~0UL
1239 || strncmp(secstrings + s->sh_name,
1240 ".init", 5) != 0)
1241 continue;
1242 s->sh_entsize = (get_offset(&mod->init_size, s)
1243 | INIT_OFFSET_MASK);
1244 DEBUGP("\t%s\n", secstrings + s->sh_name);
1246 if (m == 0)
1247 mod->init_text_size = mod->init_size;
1251 static inline int license_is_gpl_compatible(const char *license)
1253 return (strcmp(license, "GPL") == 0
1254 || strcmp(license, "GPL v2") == 0
1255 || strcmp(license, "GPL and additional rights") == 0
1256 || strcmp(license, "Dual BSD/GPL") == 0
1257 || strcmp(license, "Dual MIT/GPL") == 0
1258 || strcmp(license, "Dual MPL/GPL") == 0);
1261 static void set_license(struct module *mod, const char *license)
1263 if (!license)
1264 license = "unspecified";
1266 mod->license_gplok = license_is_gpl_compatible(license);
1267 if (!mod->license_gplok && !(tainted & TAINT_PROPRIETARY_MODULE)) {
1268 printk(KERN_WARNING "%s: module license '%s' taints kernel.\n",
1269 mod->name, license);
1270 add_taint(TAINT_PROPRIETARY_MODULE);
1274 /* Parse tag=value strings from .modinfo section */
1275 static char *next_string(char *string, unsigned long *secsize)
1277 /* Skip non-zero chars */
1278 while (string[0]) {
1279 string++;
1280 if ((*secsize)-- <= 1)
1281 return NULL;
1284 /* Skip any zero padding. */
1285 while (!string[0]) {
1286 string++;
1287 if ((*secsize)-- <= 1)
1288 return NULL;
1290 return string;
1293 static char *get_modinfo(Elf_Shdr *sechdrs,
1294 unsigned int info,
1295 const char *tag)
1297 char *p;
1298 unsigned int taglen = strlen(tag);
1299 unsigned long size = sechdrs[info].sh_size;
1301 for (p = (char *)sechdrs[info].sh_addr; p; p = next_string(p, &size)) {
1302 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
1303 return p + taglen + 1;
1305 return NULL;
1308 static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
1309 unsigned int infoindex)
1311 struct module_attribute *attr;
1312 int i;
1314 for (i = 0; (attr = modinfo_attrs[i]); i++) {
1315 if (attr->setup)
1316 attr->setup(mod,
1317 get_modinfo(sechdrs,
1318 infoindex,
1319 attr->attr.name));
1323 #ifdef CONFIG_KALLSYMS
1324 int is_exported(const char *name, const struct module *mod)
1326 if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab))
1327 return 1;
1328 else
1329 if (lookup_symbol(name, mod->syms, mod->syms + mod->num_syms))
1330 return 1;
1331 else
1332 return 0;
1335 /* As per nm */
1336 static char elf_type(const Elf_Sym *sym,
1337 Elf_Shdr *sechdrs,
1338 const char *secstrings,
1339 struct module *mod)
1341 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) {
1342 if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT)
1343 return 'v';
1344 else
1345 return 'w';
1347 if (sym->st_shndx == SHN_UNDEF)
1348 return 'U';
1349 if (sym->st_shndx == SHN_ABS)
1350 return 'a';
1351 if (sym->st_shndx >= SHN_LORESERVE)
1352 return '?';
1353 if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR)
1354 return 't';
1355 if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC
1356 && sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) {
1357 if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE))
1358 return 'r';
1359 else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1360 return 'g';
1361 else
1362 return 'd';
1364 if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) {
1365 if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1366 return 's';
1367 else
1368 return 'b';
1370 if (strncmp(secstrings + sechdrs[sym->st_shndx].sh_name,
1371 ".debug", strlen(".debug")) == 0)
1372 return 'n';
1373 return '?';
1376 static void add_kallsyms(struct module *mod,
1377 Elf_Shdr *sechdrs,
1378 unsigned int symindex,
1379 unsigned int strindex,
1380 const char *secstrings)
1382 unsigned int i;
1384 mod->symtab = (void *)sechdrs[symindex].sh_addr;
1385 mod->num_symtab = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1386 mod->strtab = (void *)sechdrs[strindex].sh_addr;
1388 /* Set types up while we still have access to sections. */
1389 for (i = 0; i < mod->num_symtab; i++)
1390 mod->symtab[i].st_info
1391 = elf_type(&mod->symtab[i], sechdrs, secstrings, mod);
1393 #else
1394 static inline void add_kallsyms(struct module *mod,
1395 Elf_Shdr *sechdrs,
1396 unsigned int symindex,
1397 unsigned int strindex,
1398 const char *secstrings)
1401 #endif /* CONFIG_KALLSYMS */
1403 /* Allocate and load the module: note that size of section 0 is always
1404 zero, and we rely on this for optional sections. */
1405 static struct module *load_module(void __user *umod,
1406 unsigned long len,
1407 const char __user *uargs)
1409 Elf_Ehdr *hdr;
1410 Elf_Shdr *sechdrs;
1411 char *secstrings, *args, *modmagic, *strtab = NULL;
1412 unsigned int i, symindex = 0, strindex = 0, setupindex, exindex,
1413 exportindex, modindex, obsparmindex, infoindex, gplindex,
1414 crcindex, gplcrcindex, versindex, pcpuindex, gplfutureindex,
1415 gplfuturecrcindex;
1416 struct module *mod;
1417 long err = 0;
1418 void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
1419 struct exception_table_entry *extable;
1420 mm_segment_t old_fs;
1422 DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n",
1423 umod, len, uargs);
1424 if (len < sizeof(*hdr))
1425 return ERR_PTR(-ENOEXEC);
1427 /* Suck in entire file: we'll want most of it. */
1428 /* vmalloc barfs on "unusual" numbers. Check here */
1429 if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL)
1430 return ERR_PTR(-ENOMEM);
1431 if (copy_from_user(hdr, umod, len) != 0) {
1432 err = -EFAULT;
1433 goto free_hdr;
1436 /* Sanity checks against insmoding binaries or wrong arch,
1437 weird elf version */
1438 if (memcmp(hdr->e_ident, ELFMAG, 4) != 0
1439 || hdr->e_type != ET_REL
1440 || !elf_check_arch(hdr)
1441 || hdr->e_shentsize != sizeof(*sechdrs)) {
1442 err = -ENOEXEC;
1443 goto free_hdr;
1446 if (len < hdr->e_shoff + hdr->e_shnum * sizeof(Elf_Shdr))
1447 goto truncated;
1449 /* Convenience variables */
1450 sechdrs = (void *)hdr + hdr->e_shoff;
1451 secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
1452 sechdrs[0].sh_addr = 0;
1454 for (i = 1; i < hdr->e_shnum; i++) {
1455 if (sechdrs[i].sh_type != SHT_NOBITS
1456 && len < sechdrs[i].sh_offset + sechdrs[i].sh_size)
1457 goto truncated;
1459 /* Mark all sections sh_addr with their address in the
1460 temporary image. */
1461 sechdrs[i].sh_addr = (size_t)hdr + sechdrs[i].sh_offset;
1463 /* Internal symbols and strings. */
1464 if (sechdrs[i].sh_type == SHT_SYMTAB) {
1465 symindex = i;
1466 strindex = sechdrs[i].sh_link;
1467 strtab = (char *)hdr + sechdrs[strindex].sh_offset;
1469 #ifndef CONFIG_MODULE_UNLOAD
1470 /* Don't load .exit sections */
1471 if (strncmp(secstrings+sechdrs[i].sh_name, ".exit", 5) == 0)
1472 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC;
1473 #endif
1476 modindex = find_sec(hdr, sechdrs, secstrings,
1477 ".gnu.linkonce.this_module");
1478 if (!modindex) {
1479 printk(KERN_WARNING "No module found in object\n");
1480 err = -ENOEXEC;
1481 goto free_hdr;
1483 mod = (void *)sechdrs[modindex].sh_addr;
1485 if (symindex == 0) {
1486 printk(KERN_WARNING "%s: module has no symbols (stripped?)\n",
1487 mod->name);
1488 err = -ENOEXEC;
1489 goto free_hdr;
1492 /* Optional sections */
1493 exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
1494 gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
1495 gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future");
1496 crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab");
1497 gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl");
1498 gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future");
1499 setupindex = find_sec(hdr, sechdrs, secstrings, "__param");
1500 exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table");
1501 obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm");
1502 versindex = find_sec(hdr, sechdrs, secstrings, "__versions");
1503 infoindex = find_sec(hdr, sechdrs, secstrings, ".modinfo");
1504 pcpuindex = find_pcpusec(hdr, sechdrs, secstrings);
1506 /* Don't keep modinfo section */
1507 sechdrs[infoindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1508 #ifdef CONFIG_KALLSYMS
1509 /* Keep symbol and string tables for decoding later. */
1510 sechdrs[symindex].sh_flags |= SHF_ALLOC;
1511 sechdrs[strindex].sh_flags |= SHF_ALLOC;
1512 #endif
1514 /* Check module struct version now, before we try to use module. */
1515 if (!check_modstruct_version(sechdrs, versindex, mod)) {
1516 err = -ENOEXEC;
1517 goto free_hdr;
1520 modmagic = get_modinfo(sechdrs, infoindex, "vermagic");
1521 /* This is allowed: modprobe --force will invalidate it. */
1522 if (!modmagic) {
1523 add_taint(TAINT_FORCED_MODULE);
1524 printk(KERN_WARNING "%s: no version magic, tainting kernel.\n",
1525 mod->name);
1526 } else if (!same_magic(modmagic, vermagic)) {
1527 printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",
1528 mod->name, modmagic, vermagic);
1529 err = -ENOEXEC;
1530 goto free_hdr;
1533 /* Now copy in args */
1534 args = strndup_user(uargs, ~0UL >> 1);
1535 if (IS_ERR(args)) {
1536 err = PTR_ERR(args);
1537 goto free_hdr;
1540 if (find_module(mod->name)) {
1541 err = -EEXIST;
1542 goto free_mod;
1545 mod->state = MODULE_STATE_COMING;
1547 /* Allow arches to frob section contents and sizes. */
1548 err = module_frob_arch_sections(hdr, sechdrs, secstrings, mod);
1549 if (err < 0)
1550 goto free_mod;
1552 if (pcpuindex) {
1553 /* We have a special allocation for this section. */
1554 percpu = percpu_modalloc(sechdrs[pcpuindex].sh_size,
1555 sechdrs[pcpuindex].sh_addralign,
1556 mod->name);
1557 if (!percpu) {
1558 err = -ENOMEM;
1559 goto free_mod;
1561 sechdrs[pcpuindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1562 mod->percpu = percpu;
1565 /* Determine total sizes, and put offsets in sh_entsize. For now
1566 this is done generically; there doesn't appear to be any
1567 special cases for the architectures. */
1568 layout_sections(mod, hdr, sechdrs, secstrings);
1570 /* Do the allocs. */
1571 ptr = module_alloc(mod->core_size);
1572 if (!ptr) {
1573 err = -ENOMEM;
1574 goto free_percpu;
1576 memset(ptr, 0, mod->core_size);
1577 mod->module_core = ptr;
1579 ptr = module_alloc(mod->init_size);
1580 if (!ptr && mod->init_size) {
1581 err = -ENOMEM;
1582 goto free_core;
1584 memset(ptr, 0, mod->init_size);
1585 mod->module_init = ptr;
1587 /* Transfer each section which specifies SHF_ALLOC */
1588 DEBUGP("final section addresses:\n");
1589 for (i = 0; i < hdr->e_shnum; i++) {
1590 void *dest;
1592 if (!(sechdrs[i].sh_flags & SHF_ALLOC))
1593 continue;
1595 if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK)
1596 dest = mod->module_init
1597 + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK);
1598 else
1599 dest = mod->module_core + sechdrs[i].sh_entsize;
1601 if (sechdrs[i].sh_type != SHT_NOBITS)
1602 memcpy(dest, (void *)sechdrs[i].sh_addr,
1603 sechdrs[i].sh_size);
1604 /* Update sh_addr to point to copy in image. */
1605 sechdrs[i].sh_addr = (unsigned long)dest;
1606 DEBUGP("\t0x%lx %s\n", sechdrs[i].sh_addr, secstrings + sechdrs[i].sh_name);
1608 /* Module has been moved. */
1609 mod = (void *)sechdrs[modindex].sh_addr;
1611 /* Now we've moved module, initialize linked lists, etc. */
1612 module_unload_init(mod);
1614 /* Set up license info based on the info section */
1615 set_license(mod, get_modinfo(sechdrs, infoindex, "license"));
1617 if (strcmp(mod->name, "ndiswrapper") == 0)
1618 add_taint(TAINT_PROPRIETARY_MODULE);
1619 if (strcmp(mod->name, "driverloader") == 0)
1620 add_taint(TAINT_PROPRIETARY_MODULE);
1622 /* Set up MODINFO_ATTR fields */
1623 setup_modinfo(mod, sechdrs, infoindex);
1625 /* Fix up syms, so that st_value is a pointer to location. */
1626 err = simplify_symbols(sechdrs, symindex, strtab, versindex, pcpuindex,
1627 mod);
1628 if (err < 0)
1629 goto cleanup;
1631 /* Set up EXPORTed & EXPORT_GPLed symbols (section 0 is 0 length) */
1632 mod->num_syms = sechdrs[exportindex].sh_size / sizeof(*mod->syms);
1633 mod->syms = (void *)sechdrs[exportindex].sh_addr;
1634 if (crcindex)
1635 mod->crcs = (void *)sechdrs[crcindex].sh_addr;
1636 mod->num_gpl_syms = sechdrs[gplindex].sh_size / sizeof(*mod->gpl_syms);
1637 mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr;
1638 if (gplcrcindex)
1639 mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr;
1640 mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size /
1641 sizeof(*mod->gpl_future_syms);
1642 mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr;
1643 if (gplfuturecrcindex)
1644 mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr;
1646 #ifdef CONFIG_MODVERSIONS
1647 if ((mod->num_syms && !crcindex) ||
1648 (mod->num_gpl_syms && !gplcrcindex) ||
1649 (mod->num_gpl_future_syms && !gplfuturecrcindex)) {
1650 printk(KERN_WARNING "%s: No versions for exported symbols."
1651 " Tainting kernel.\n", mod->name);
1652 add_taint(TAINT_FORCED_MODULE);
1654 #endif
1656 /* Now do relocations. */
1657 for (i = 1; i < hdr->e_shnum; i++) {
1658 const char *strtab = (char *)sechdrs[strindex].sh_addr;
1659 unsigned int info = sechdrs[i].sh_info;
1661 /* Not a valid relocation section? */
1662 if (info >= hdr->e_shnum)
1663 continue;
1665 /* Don't bother with non-allocated sections */
1666 if (!(sechdrs[info].sh_flags & SHF_ALLOC))
1667 continue;
1669 if (sechdrs[i].sh_type == SHT_REL)
1670 err = apply_relocate(sechdrs, strtab, symindex, i,mod);
1671 else if (sechdrs[i].sh_type == SHT_RELA)
1672 err = apply_relocate_add(sechdrs, strtab, symindex, i,
1673 mod);
1674 if (err < 0)
1675 goto cleanup;
1678 /* Find duplicate symbols */
1679 err = verify_export_symbols(mod);
1681 if (err < 0)
1682 goto cleanup;
1684 /* Set up and sort exception table */
1685 mod->num_exentries = sechdrs[exindex].sh_size / sizeof(*mod->extable);
1686 mod->extable = extable = (void *)sechdrs[exindex].sh_addr;
1687 sort_extable(extable, extable + mod->num_exentries);
1689 /* Finally, copy percpu area over. */
1690 percpu_modcopy(mod->percpu, (void *)sechdrs[pcpuindex].sh_addr,
1691 sechdrs[pcpuindex].sh_size);
1693 add_kallsyms(mod, sechdrs, symindex, strindex, secstrings);
1695 err = module_finalize(hdr, sechdrs, mod);
1696 if (err < 0)
1697 goto cleanup;
1699 /* flush the icache in correct context */
1700 old_fs = get_fs();
1701 set_fs(KERNEL_DS);
1704 * Flush the instruction cache, since we've played with text.
1705 * Do it before processing of module parameters, so the module
1706 * can provide parameter accessor functions of its own.
1708 if (mod->module_init)
1709 flush_icache_range((unsigned long)mod->module_init,
1710 (unsigned long)mod->module_init
1711 + mod->init_size);
1712 flush_icache_range((unsigned long)mod->module_core,
1713 (unsigned long)mod->module_core + mod->core_size);
1715 set_fs(old_fs);
1717 mod->args = args;
1718 if (obsparmindex)
1719 printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
1720 mod->name);
1722 /* Size of section 0 is 0, so this works well if no params */
1723 err = parse_args(mod->name, mod->args,
1724 (struct kernel_param *)
1725 sechdrs[setupindex].sh_addr,
1726 sechdrs[setupindex].sh_size
1727 / sizeof(struct kernel_param),
1728 NULL);
1729 if (err < 0)
1730 goto arch_cleanup;
1732 err = mod_sysfs_setup(mod,
1733 (struct kernel_param *)
1734 sechdrs[setupindex].sh_addr,
1735 sechdrs[setupindex].sh_size
1736 / sizeof(struct kernel_param));
1737 if (err < 0)
1738 goto arch_cleanup;
1739 add_sect_attrs(mod, hdr->e_shnum, secstrings, sechdrs);
1741 /* Get rid of temporary copy */
1742 vfree(hdr);
1744 /* Done! */
1745 return mod;
1747 arch_cleanup:
1748 module_arch_cleanup(mod);
1749 cleanup:
1750 module_unload_free(mod);
1751 module_free(mod, mod->module_init);
1752 free_core:
1753 module_free(mod, mod->module_core);
1754 free_percpu:
1755 if (percpu)
1756 percpu_modfree(percpu);
1757 free_mod:
1758 kfree(args);
1759 free_hdr:
1760 vfree(hdr);
1761 return ERR_PTR(err);
1763 truncated:
1764 printk(KERN_ERR "Module len %lu truncated\n", len);
1765 err = -ENOEXEC;
1766 goto free_hdr;
1770 * link the module with the whole machine is stopped with interrupts off
1771 * - this defends against kallsyms not taking locks
1773 static int __link_module(void *_mod)
1775 struct module *mod = _mod;
1776 list_add(&mod->list, &modules);
1777 return 0;
1780 /* This is where the real work happens */
1781 asmlinkage long
1782 sys_init_module(void __user *umod,
1783 unsigned long len,
1784 const char __user *uargs)
1786 struct module *mod;
1787 int ret = 0;
1789 /* Must have permission */
1790 if (!capable(CAP_SYS_MODULE))
1791 return -EPERM;
1793 /* Only one module load at a time, please */
1794 if (mutex_lock_interruptible(&module_mutex) != 0)
1795 return -EINTR;
1797 /* Do all the hard work */
1798 mod = load_module(umod, len, uargs);
1799 if (IS_ERR(mod)) {
1800 mutex_unlock(&module_mutex);
1801 return PTR_ERR(mod);
1804 /* Now sew it into the lists. They won't access us, since
1805 strong_try_module_get() will fail. */
1806 stop_machine_run(__link_module, mod, NR_CPUS);
1808 /* Drop lock so they can recurse */
1809 mutex_unlock(&module_mutex);
1811 blocking_notifier_call_chain(&module_notify_list,
1812 MODULE_STATE_COMING, mod);
1814 /* Start the module */
1815 if (mod->init != NULL)
1816 ret = mod->init();
1817 if (ret < 0) {
1818 /* Init routine failed: abort. Try to protect us from
1819 buggy refcounters. */
1820 mod->state = MODULE_STATE_GOING;
1821 synchronize_sched();
1822 if (mod->unsafe)
1823 printk(KERN_ERR "%s: module is now stuck!\n",
1824 mod->name);
1825 else {
1826 module_put(mod);
1827 mutex_lock(&module_mutex);
1828 free_module(mod);
1829 mutex_unlock(&module_mutex);
1831 return ret;
1834 /* Now it's a first class citizen! */
1835 mutex_lock(&module_mutex);
1836 mod->state = MODULE_STATE_LIVE;
1837 /* Drop initial reference. */
1838 module_put(mod);
1839 module_free(mod, mod->module_init);
1840 mod->module_init = NULL;
1841 mod->init_size = 0;
1842 mod->init_text_size = 0;
1843 mutex_unlock(&module_mutex);
1845 return 0;
1848 static inline int within(unsigned long addr, void *start, unsigned long size)
1850 return ((void *)addr >= start && (void *)addr < start + size);
1853 #ifdef CONFIG_KALLSYMS
1855 * This ignores the intensely annoying "mapping symbols" found
1856 * in ARM ELF files: $a, $t and $d.
1858 static inline int is_arm_mapping_symbol(const char *str)
1860 return str[0] == '$' && strchr("atd", str[1])
1861 && (str[2] == '\0' || str[2] == '.');
1864 static const char *get_ksymbol(struct module *mod,
1865 unsigned long addr,
1866 unsigned long *size,
1867 unsigned long *offset)
1869 unsigned int i, best = 0;
1870 unsigned long nextval;
1872 /* At worse, next value is at end of module */
1873 if (within(addr, mod->module_init, mod->init_size))
1874 nextval = (unsigned long)mod->module_init+mod->init_text_size;
1875 else
1876 nextval = (unsigned long)mod->module_core+mod->core_text_size;
1878 /* Scan for closest preceeding symbol, and next symbol. (ELF
1879 starts real symbols at 1). */
1880 for (i = 1; i < mod->num_symtab; i++) {
1881 if (mod->symtab[i].st_shndx == SHN_UNDEF)
1882 continue;
1884 /* We ignore unnamed symbols: they're uninformative
1885 * and inserted at a whim. */
1886 if (mod->symtab[i].st_value <= addr
1887 && mod->symtab[i].st_value > mod->symtab[best].st_value
1888 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
1889 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
1890 best = i;
1891 if (mod->symtab[i].st_value > addr
1892 && mod->symtab[i].st_value < nextval
1893 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
1894 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
1895 nextval = mod->symtab[i].st_value;
1898 if (!best)
1899 return NULL;
1901 *size = nextval - mod->symtab[best].st_value;
1902 *offset = addr - mod->symtab[best].st_value;
1903 return mod->strtab + mod->symtab[best].st_name;
1906 /* For kallsyms to ask for address resolution. NULL means not found.
1907 We don't lock, as this is used for oops resolution and races are a
1908 lesser concern. */
1909 const char *module_address_lookup(unsigned long addr,
1910 unsigned long *size,
1911 unsigned long *offset,
1912 char **modname)
1914 struct module *mod;
1916 list_for_each_entry(mod, &modules, list) {
1917 if (within(addr, mod->module_init, mod->init_size)
1918 || within(addr, mod->module_core, mod->core_size)) {
1919 *modname = mod->name;
1920 return get_ksymbol(mod, addr, size, offset);
1923 return NULL;
1926 struct module *module_get_kallsym(unsigned int symnum,
1927 unsigned long *value,
1928 char *type,
1929 char namebuf[128])
1931 struct module *mod;
1933 mutex_lock(&module_mutex);
1934 list_for_each_entry(mod, &modules, list) {
1935 if (symnum < mod->num_symtab) {
1936 *value = mod->symtab[symnum].st_value;
1937 *type = mod->symtab[symnum].st_info;
1938 strncpy(namebuf,
1939 mod->strtab + mod->symtab[symnum].st_name,
1940 127);
1941 mutex_unlock(&module_mutex);
1942 return mod;
1944 symnum -= mod->num_symtab;
1946 mutex_unlock(&module_mutex);
1947 return NULL;
1950 static unsigned long mod_find_symname(struct module *mod, const char *name)
1952 unsigned int i;
1954 for (i = 0; i < mod->num_symtab; i++)
1955 if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 &&
1956 mod->symtab[i].st_info != 'U')
1957 return mod->symtab[i].st_value;
1958 return 0;
1961 /* Look for this name: can be of form module:name. */
1962 unsigned long module_kallsyms_lookup_name(const char *name)
1964 struct module *mod;
1965 char *colon;
1966 unsigned long ret = 0;
1968 /* Don't lock: we're in enough trouble already. */
1969 if ((colon = strchr(name, ':')) != NULL) {
1970 *colon = '\0';
1971 if ((mod = find_module(name)) != NULL)
1972 ret = mod_find_symname(mod, colon+1);
1973 *colon = ':';
1974 } else {
1975 list_for_each_entry(mod, &modules, list)
1976 if ((ret = mod_find_symname(mod, name)) != 0)
1977 break;
1979 return ret;
1981 #endif /* CONFIG_KALLSYMS */
1983 /* Called by the /proc file system to return a list of modules. */
1984 static void *m_start(struct seq_file *m, loff_t *pos)
1986 struct list_head *i;
1987 loff_t n = 0;
1989 mutex_lock(&module_mutex);
1990 list_for_each(i, &modules) {
1991 if (n++ == *pos)
1992 break;
1994 if (i == &modules)
1995 return NULL;
1996 return i;
1999 static void *m_next(struct seq_file *m, void *p, loff_t *pos)
2001 struct list_head *i = p;
2002 (*pos)++;
2003 if (i->next == &modules)
2004 return NULL;
2005 return i->next;
2008 static void m_stop(struct seq_file *m, void *p)
2010 mutex_unlock(&module_mutex);
2013 static int m_show(struct seq_file *m, void *p)
2015 struct module *mod = list_entry(p, struct module, list);
2016 seq_printf(m, "%s %lu",
2017 mod->name, mod->init_size + mod->core_size);
2018 print_unload_info(m, mod);
2020 /* Informative for users. */
2021 seq_printf(m, " %s",
2022 mod->state == MODULE_STATE_GOING ? "Unloading":
2023 mod->state == MODULE_STATE_COMING ? "Loading":
2024 "Live");
2025 /* Used by oprofile and other similar tools. */
2026 seq_printf(m, " 0x%p", mod->module_core);
2028 seq_printf(m, "\n");
2029 return 0;
2032 /* Format: modulename size refcount deps address
2034 Where refcount is a number or -, and deps is a comma-separated list
2035 of depends or -.
2037 struct seq_operations modules_op = {
2038 .start = m_start,
2039 .next = m_next,
2040 .stop = m_stop,
2041 .show = m_show
2044 /* Given an address, look for it in the module exception tables. */
2045 const struct exception_table_entry *search_module_extables(unsigned long addr)
2047 unsigned long flags;
2048 const struct exception_table_entry *e = NULL;
2049 struct module *mod;
2051 spin_lock_irqsave(&modlist_lock, flags);
2052 list_for_each_entry(mod, &modules, list) {
2053 if (mod->num_exentries == 0)
2054 continue;
2056 e = search_extable(mod->extable,
2057 mod->extable + mod->num_exentries - 1,
2058 addr);
2059 if (e)
2060 break;
2062 spin_unlock_irqrestore(&modlist_lock, flags);
2064 /* Now, if we found one, we are running inside it now, hence
2065 we cannot unload the module, hence no refcnt needed. */
2066 return e;
2069 /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */
2070 struct module *__module_text_address(unsigned long addr)
2072 struct module *mod;
2074 list_for_each_entry(mod, &modules, list)
2075 if (within(addr, mod->module_init, mod->init_text_size)
2076 || within(addr, mod->module_core, mod->core_text_size))
2077 return mod;
2078 return NULL;
2081 struct module *module_text_address(unsigned long addr)
2083 struct module *mod;
2084 unsigned long flags;
2086 spin_lock_irqsave(&modlist_lock, flags);
2087 mod = __module_text_address(addr);
2088 spin_unlock_irqrestore(&modlist_lock, flags);
2090 return mod;
2093 /* Don't grab lock, we're oopsing. */
2094 void print_modules(void)
2096 struct module *mod;
2098 printk("Modules linked in:");
2099 list_for_each_entry(mod, &modules, list)
2100 printk(" %s", mod->name);
2101 printk("\n");
2104 void module_add_driver(struct module *mod, struct device_driver *drv)
2106 if (!mod || !drv)
2107 return;
2109 /* Don't check return code; this call is idempotent */
2110 sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module");
2112 EXPORT_SYMBOL(module_add_driver);
2114 void module_remove_driver(struct device_driver *drv)
2116 if (!drv)
2117 return;
2118 sysfs_remove_link(&drv->kobj, "module");
2120 EXPORT_SYMBOL(module_remove_driver);
2122 #ifdef CONFIG_MODVERSIONS
2123 /* Generate the signature for struct module here, too, for modversions. */
2124 void struct_module(struct module *mod) { return; }
2125 EXPORT_SYMBOL(struct_module);
2126 #endif