linux/kernel/module.c
<<
>>
Prefs
   1/*
   2   Copyright (C) 2002 Richard Henderson
   3   Copyright (C) 2001 Rusty Russell, 2002 Rusty Russell IBM.
   4
   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.
   9
  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.
  14
  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
  18*/
  19#include <linux/module.h>
  20#include <linux/moduleloader.h>
  21#include <linux/init.h>
  22#include <linux/kallsyms.h>
  23#include <linux/sysfs.h>
  24#include <linux/kernel.h>
  25#include <linux/slab.h>
  26#include <linux/vmalloc.h>
  27#include <linux/elf.h>
  28#include <linux/seq_file.h>
  29#include <linux/syscalls.h>
  30#include <linux/fcntl.h>
  31#include <linux/rcupdate.h>
  32#include <linux/capability.h>
  33#include <linux/cpu.h>
  34#include <linux/moduleparam.h>
  35#include <linux/errno.h>
  36#include <linux/err.h>
  37#include <linux/vermagic.h>
  38#include <linux/notifier.h>
  39#include <linux/sched.h>
  40#include <linux/stop_machine.h>
  41#include <linux/device.h>
  42#include <linux/string.h>
  43#include <linux/mutex.h>
  44#include <linux/unwind.h>
  45#include <asm/uaccess.h>
  46#include <asm/cacheflush.h>
  47#include <linux/license.h>
  48#include <asm/sections.h>
  49
  50#if 0
  51#define DEBUGP printk
  52#else
  53#define DEBUGP(fmt , a...)
  54#endif
  55
  56#ifndef ARCH_SHF_SMALL
  57#define ARCH_SHF_SMALL 0
  58#endif
  59
  60/* If this is set, the section belongs in the init part of the module */
  61#define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
  62
  63/* List of modules, protected by module_mutex or preempt_disable
  64 * (add/delete uses stop_machine). */
  65static DEFINE_MUTEX(module_mutex);
  66static LIST_HEAD(modules);
  67
  68/* Waiting for a module to finish initializing? */
  69static DECLARE_WAIT_QUEUE_HEAD(module_wq);
  70
  71static BLOCKING_NOTIFIER_HEAD(module_notify_list);
  72
  73int register_module_notifier(struct notifier_block * nb)
  74{
  75        return blocking_notifier_chain_register(&module_notify_list, nb);
  76}
  77EXPORT_SYMBOL(register_module_notifier);
  78
  79int unregister_module_notifier(struct notifier_block * nb)
  80{
  81        return blocking_notifier_chain_unregister(&module_notify_list, nb);
  82}
  83EXPORT_SYMBOL(unregister_module_notifier);
  84
  85/* We require a truly strong try_module_get(): 0 means failure due to
  86   ongoing or failed initialization etc. */
  87static inline int strong_try_module_get(struct module *mod)
  88{
  89        if (mod && mod->state == MODULE_STATE_COMING)
  90                return -EBUSY;
  91        if (try_module_get(mod))
  92                return 0;
  93        else
  94                return -ENOENT;
  95}
  96
  97static inline void add_taint_module(struct module *mod, unsigned flag)
  98{
  99        add_taint(flag);
 100        mod->taints |= flag;
 101}
 102
 103/*
 104 * A thread that wants to hold a reference to a module only while it
 105 * is running can call this to safely exit.  nfsd and lockd use this.
 106 */
 107void __module_put_and_exit(struct module *mod, long code)
 108{
 109        module_put(mod);
 110        do_exit(code);
 111}
 112EXPORT_SYMBOL(__module_put_and_exit);
 113
 114/* Find a module section: 0 means not found. */
 115static unsigned int find_sec(Elf_Ehdr *hdr,
 116                             Elf_Shdr *sechdrs,
 117                             const char *secstrings,
 118                             const char *name)
 119{
 120        unsigned int i;
 121
 122        for (i = 1; i < hdr->e_shnum; i++)
 123                /* Alloc bit cleared means "ignore it." */
 124                if ((sechdrs[i].sh_flags & SHF_ALLOC)
 125                    && strcmp(secstrings+sechdrs[i].sh_name, name) == 0)
 126                        return i;
 127        return 0;
 128}
 129
 130/* Provided by the linker */
 131extern const struct kernel_symbol __start___ksymtab[];
 132extern const struct kernel_symbol __stop___ksymtab[];
 133extern const struct kernel_symbol __start___ksymtab_gpl[];
 134extern const struct kernel_symbol __stop___ksymtab_gpl[];
 135extern const struct kernel_symbol __start___ksymtab_gpl_future[];
 136extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
 137extern const struct kernel_symbol __start___ksymtab_unused[];
 138extern const struct kernel_symbol __stop___ksymtab_unused[];
 139extern const struct kernel_symbol __start___ksymtab_unused_gpl[];
 140extern const struct kernel_symbol __stop___ksymtab_unused_gpl[];
 141extern const struct kernel_symbol __start___ksymtab_gpl_future[];
 142extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
 143extern const unsigned long __start___kcrctab[];
 144extern const unsigned long __start___kcrctab_gpl[];
 145extern const unsigned long __start___kcrctab_gpl_future[];
 146extern const unsigned long __start___kcrctab_unused[];
 147extern const unsigned long __start___kcrctab_unused_gpl[];
 148
 149#ifndef CONFIG_MODVERSIONS
 150#define symversion(base, idx) NULL
 151#else
 152#define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
 153#endif
 154
 155/* lookup symbol in given range of kernel_symbols */
 156static const struct kernel_symbol *lookup_symbol(const char *name,
 157        const struct kernel_symbol *start,
 158        const struct kernel_symbol *stop)
 159{
 160        const struct kernel_symbol *ks = start;
 161        for (; ks < stop; ks++)
 162                if (strcmp(ks->name, name) == 0)
 163                        return ks;
 164        return NULL;
 165}
 166
 167static bool always_ok(bool gplok, bool warn, const char *name)
 168{
 169        return true;
 170}
 171
 172static bool printk_unused_warning(bool gplok, bool warn, const char *name)
 173{
 174        if (warn) {
 175                printk(KERN_WARNING "Symbol %s is marked as UNUSED, "
 176                       "however this module is using it.\n", name);
 177                printk(KERN_WARNING
 178                       "This symbol will go away in the future.\n");
 179                printk(KERN_WARNING
 180                       "Please evalute if this is the right api to use and if "
 181                       "it really is, submit a report the linux kernel "
 182                       "mailinglist together with submitting your code for "
 183                       "inclusion.\n");
 184        }
 185        return true;
 186}
 187
 188static bool gpl_only_unused_warning(bool gplok, bool warn, const char *name)
 189{
 190        if (!gplok)
 191                return false;
 192        return printk_unused_warning(gplok, warn, name);
 193}
 194
 195static bool gpl_only(bool gplok, bool warn, const char *name)
 196{
 197        return gplok;
 198}
 199
 200static bool warn_if_not_gpl(bool gplok, bool warn, const char *name)
 201{
 202        if (!gplok && warn) {
 203                printk(KERN_WARNING "Symbol %s is being used "
 204                       "by a non-GPL module, which will not "
 205                       "be allowed in the future\n", name);
 206                printk(KERN_WARNING "Please see the file "
 207                       "Documentation/feature-removal-schedule.txt "
 208                       "in the kernel source tree for more details.\n");
 209        }
 210        return true;
 211}
 212
 213struct symsearch {
 214        const struct kernel_symbol *start, *stop;
 215        const unsigned long *crcs;
 216        bool (*check)(bool gplok, bool warn, const char *name);
 217};
 218
 219/* Look through this array of symbol tables for a symbol match which
 220 * passes the check function. */
 221static const struct kernel_symbol *search_symarrays(const struct symsearch *arr,
 222                                                    unsigned int num,
 223                                                    const char *name,
 224                                                    bool gplok,
 225                                                    bool warn,
 226                                                    const unsigned long **crc)
 227{
 228        unsigned int i;
 229        const struct kernel_symbol *ks;
 230
 231        for (i = 0; i < num; i++) {
 232                ks = lookup_symbol(name, arr[i].start, arr[i].stop);
 233                if (!ks || !arr[i].check(gplok, warn, name))
 234                        continue;
 235
 236                if (crc)
 237                        *crc = symversion(arr[i].crcs, ks - arr[i].start);
 238                return ks;
 239        }
 240        return NULL;
 241}
 242
 243/* Find a symbol, return value, (optional) crc and (optional) module
 244 * which owns it */
 245static unsigned long find_symbol(const char *name,
 246                                 struct module **owner,
 247                                 const unsigned long **crc,
 248                                 bool gplok,
 249                                 bool warn)
 250{
 251        struct module *mod;
 252        const struct kernel_symbol *ks;
 253        const struct symsearch arr[] = {
 254                { __start___ksymtab, __stop___ksymtab, __start___kcrctab,
 255                  always_ok },
 256                { __start___ksymtab_gpl, __stop___ksymtab_gpl,
 257                  __start___kcrctab_gpl, gpl_only },
 258                { __start___ksymtab_gpl_future, __stop___ksymtab_gpl_future,
 259                  __start___kcrctab_gpl_future, warn_if_not_gpl },
 260                { __start___ksymtab_unused, __stop___ksymtab_unused,
 261                  __start___kcrctab_unused, printk_unused_warning },
 262                { __start___ksymtab_unused_gpl, __stop___ksymtab_unused_gpl,
 263                  __start___kcrctab_unused_gpl, gpl_only_unused_warning },
 264        };
 265
 266        /* Core kernel first. */
 267        ks = search_symarrays(arr, ARRAY_SIZE(arr), name, gplok, warn, crc);
 268        if (ks) {
 269                if (owner)
 270                        *owner = NULL;
 271                return ks->value;
 272        }
 273
 274        /* Now try modules. */
 275        list_for_each_entry(mod, &modules, list) {
 276                struct symsearch arr[] = {
 277                        { mod->syms, mod->syms + mod->num_syms, mod->crcs,
 278                          always_ok },
 279                        { mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms,
 280                          mod->gpl_crcs, gpl_only },
 281                        { mod->gpl_future_syms,
 282                          mod->gpl_future_syms + mod->num_gpl_future_syms,
 283                          mod->gpl_future_crcs, warn_if_not_gpl },
 284                        { mod->unused_syms,
 285                          mod->unused_syms + mod->num_unused_syms,
 286                          mod->unused_crcs, printk_unused_warning },
 287                        { mod->unused_gpl_syms,
 288                          mod->unused_gpl_syms + mod->num_unused_gpl_syms,
 289                          mod->unused_gpl_crcs, gpl_only_unused_warning },
 290                };
 291
 292                ks = search_symarrays(arr, ARRAY_SIZE(arr),
 293                                      name, gplok, warn, crc);
 294                if (ks) {
 295                        if (owner)
 296                                *owner = mod;
 297                        return ks->value;
 298                }
 299        }
 300
 301        DEBUGP("Failed to find symbol %s\n", name);
 302        return -ENOENT;
 303}
 304
 305/* Search for module by name: must hold module_mutex. */
 306static struct module *find_module(const char *name)
 307{
 308        struct module *mod;
 309
 310        list_for_each_entry(mod, &modules, list) {
 311                if (strcmp(mod->name, name) == 0)
 312                        return mod;
 313        }
 314        return NULL;
 315}
 316
 317#ifdef CONFIG_SMP
 318/* Number of blocks used and allocated. */
 319static unsigned int pcpu_num_used, pcpu_num_allocated;
 320/* Size of each block.  -ve means used. */
 321static int *pcpu_size;
 322
 323static int split_block(unsigned int i, unsigned short size)
 324{
 325        /* Reallocation required? */
 326        if (pcpu_num_used + 1 > pcpu_num_allocated) {
 327                int *new;
 328
 329                new = krealloc(pcpu_size, sizeof(new[0])*pcpu_num_allocated*2,
 330                               GFP_KERNEL);
 331                if (!new)
 332                        return 0;
 333
 334                pcpu_num_allocated *= 2;
 335                pcpu_size = new;
 336        }
 337
 338        /* Insert a new subblock */
 339        memmove(&pcpu_size[i+1], &pcpu_size[i],
 340                sizeof(pcpu_size[0]) * (pcpu_num_used - i));
 341        pcpu_num_used++;
 342
 343        pcpu_size[i+1] -= size;
 344        pcpu_size[i] = size;
 345        return 1;
 346}
 347
 348static inline unsigned int block_size(int val)
 349{
 350        if (val < 0)
 351                return -val;
 352        return val;
 353}
 354
 355static void *percpu_modalloc(unsigned long size, unsigned long align,
 356                             const char *name)
 357{
 358        unsigned long extra;
 359        unsigned int i;
 360        void *ptr;
 361
 362        if (align > PAGE_SIZE) {
 363                printk(KERN_WARNING "%s: per-cpu alignment %li > %li\n",
 364                       name, align, PAGE_SIZE);
 365                align = PAGE_SIZE;
 366        }
 367
 368        ptr = __per_cpu_start;
 369        for (i = 0; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
 370                /* Extra for alignment requirement. */
 371                extra = ALIGN((unsigned long)ptr, align) - (unsigned long)ptr;
 372                BUG_ON(i == 0 && extra != 0);
 373
 374                if (pcpu_size[i] < 0 || pcpu_size[i] < extra + size)
 375                        continue;
 376
 377                /* Transfer extra to previous block. */
 378                if (pcpu_size[i-1] < 0)
 379                        pcpu_size[i-1] -= extra;
 380                else
 381                        pcpu_size[i-1] += extra;
 382                pcpu_size[i] -= extra;
 383                ptr += extra;
 384
 385                /* Split block if warranted */
 386                if (pcpu_size[i] - size > sizeof(unsigned long))
 387                        if (!split_block(i, size))
 388                                return NULL;
 389
 390                /* Mark allocated */
 391                pcpu_size[i] = -pcpu_size[i];
 392                return ptr;
 393        }
 394
 395        printk(KERN_WARNING "Could not allocate %lu bytes percpu data\n",
 396               size);
 397        return NULL;
 398}
 399
 400static void percpu_modfree(void *freeme)
 401{
 402        unsigned int i;
 403        void *ptr = __per_cpu_start + block_size(pcpu_size[0]);
 404
 405        /* First entry is core kernel percpu data. */
 406        for (i = 1; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
 407                if (ptr == freeme) {
 408                        pcpu_size[i] = -pcpu_size[i];
 409                        goto free;
 410                }
 411        }
 412        BUG();
 413
 414 free:
 415        /* Merge with previous? */
 416        if (pcpu_size[i-1] >= 0) {
 417                pcpu_size[i-1] += pcpu_size[i];
 418                pcpu_num_used--;
 419                memmove(&pcpu_size[i], &pcpu_size[i+1],
 420                        (pcpu_num_used - i) * sizeof(pcpu_size[0]));
 421                i--;
 422        }
 423        /* Merge with next? */
 424        if (i+1 < pcpu_num_used && pcpu_size[i+1] >= 0) {
 425                pcpu_size[i] += pcpu_size[i+1];
 426                pcpu_num_used--;
 427                memmove(&pcpu_size[i+1], &pcpu_size[i+2],
 428                        (pcpu_num_used - (i+1)) * sizeof(pcpu_size[0]));
 429        }
 430}
 431
 432static unsigned int find_pcpusec(Elf_Ehdr *hdr,
 433                                 Elf_Shdr *sechdrs,
 434                                 const char *secstrings)
 435{
 436        return find_sec(hdr, sechdrs, secstrings, ".data.percpu");
 437}
 438
 439static void percpu_modcopy(void *pcpudest, const void *from, unsigned long size)
 440{
 441        int cpu;
 442
 443        for_each_possible_cpu(cpu)
 444                memcpy(pcpudest + per_cpu_offset(cpu), from, size);
 445}
 446
 447static int percpu_modinit(void)
 448{
 449        pcpu_num_used = 2;
 450        pcpu_num_allocated = 2;
 451        pcpu_size = kmalloc(sizeof(pcpu_size[0]) * pcpu_num_allocated,
 452                            GFP_KERNEL);
 453        /* Static in-kernel percpu data (used). */
 454        pcpu_size[0] = -(__per_cpu_end-__per_cpu_start);
 455        /* Free room. */
 456        pcpu_size[1] = PERCPU_ENOUGH_ROOM + pcpu_size[0];
 457        if (pcpu_size[1] < 0) {
 458                printk(KERN_ERR "No per-cpu room for modules.\n");
 459                pcpu_num_used = 1;
 460        }
 461
 462        return 0;
 463}
 464__initcall(percpu_modinit);
 465#else /* ... !CONFIG_SMP */
 466static inline void *percpu_modalloc(unsigned long size, unsigned long align,
 467                                    const char *name)
 468{
 469        return NULL;
 470}
 471static inline void percpu_modfree(void *pcpuptr)
 472{
 473        BUG();
 474}
 475static inline unsigned int find_pcpusec(Elf_Ehdr *hdr,
 476                                        Elf_Shdr *sechdrs,
 477                                        const char *secstrings)
 478{
 479        return 0;
 480}
 481static inline void percpu_modcopy(void *pcpudst, const void *src,
 482                                  unsigned long size)
 483{
 484        /* pcpusec should be 0, and size of that section should be 0. */
 485        BUG_ON(size != 0);
 486}
 487#endif /* CONFIG_SMP */
 488
 489#define MODINFO_ATTR(field)     \
 490static void setup_modinfo_##field(struct module *mod, const char *s)  \
 491{                                                                     \
 492        mod->field = kstrdup(s, GFP_KERNEL);                          \
 493}                                                                     \
 494static ssize_t show_modinfo_##field(struct module_attribute *mattr,   \
 495                        struct module *mod, char *buffer)             \
 496{                                                                     \
 497        return sprintf(buffer, "%s\n", mod->field);                   \
 498}                                                                     \
 499static int modinfo_##field##_exists(struct module *mod)               \
 500{                                                                     \
 501        return mod->field != NULL;                                    \
 502}                                                                     \
 503static void free_modinfo_##field(struct module *mod)                  \
 504{                                                                     \
 505        kfree(mod->field);                                            \
 506        mod->field = NULL;                                            \
 507}                                                                     \
 508static struct module_attribute modinfo_##field = {                    \
 509        .attr = { .name = __stringify(field), .mode = 0444 },         \
 510        .show = show_modinfo_##field,                                 \
 511        .setup = setup_modinfo_##field,                               \
 512        .test = modinfo_##field##_exists,                             \
 513        .free = free_modinfo_##field,                                 \
 514};
 515
 516MODINFO_ATTR(version);
 517MODINFO_ATTR(srcversion);
 518
 519static char last_unloaded_module[MODULE_NAME_LEN+1];
 520
 521#ifdef CONFIG_MODULE_UNLOAD
 522/* Init the unload section of the module. */
 523static void module_unload_init(struct module *mod)
 524{
 525        unsigned int i;
 526
 527        INIT_LIST_HEAD(&mod->modules_which_use_me);
 528        for (i = 0; i < NR_CPUS; i++)
 529                local_set(&mod->ref[i].count, 0);
 530        /* Hold reference count during initialization. */
 531        local_set(&mod->ref[raw_smp_processor_id()].count, 1);
 532        /* Backwards compatibility macros put refcount during init. */
 533        mod->waiter = current;
 534}
 535
 536/* modules using other modules */
 537struct module_use
 538{
 539        struct list_head list;
 540        struct module *module_which_uses;
 541};
 542
 543/* Does a already use b? */
 544static int already_uses(struct module *a, struct module *b)
 545{
 546        struct module_use *use;
 547
 548        list_for_each_entry(use, &b->modules_which_use_me, list) {
 549                if (use->module_which_uses == a) {
 550                        DEBUGP("%s uses %s!\n", a->name, b->name);
 551                        return 1;
 552                }
 553        }
 554        DEBUGP("%s does not use %s!\n", a->name, b->name);
 555        return 0;
 556}
 557
 558/* Module a uses b */
 559static int use_module(struct module *a, struct module *b)
 560{
 561        struct module_use *use;
 562        int no_warn, err;
 563
 564        if (b == NULL || already_uses(a, b)) return 1;
 565
 566        /* If we're interrupted or time out, we fail. */
 567        if (wait_event_interruptible_timeout(
 568                    module_wq, (err = strong_try_module_get(b)) != -EBUSY,
 569                    30 * HZ) <= 0) {
 570                printk("%s: gave up waiting for init of module %s.\n",
 571                       a->name, b->name);
 572                return 0;
 573        }
 574
 575        /* If strong_try_module_get() returned a different error, we fail. */
 576        if (err)
 577                return 0;
 578
 579        DEBUGP("Allocating new usage for %s.\n", a->name);
 580        use = kmalloc(sizeof(*use), GFP_ATOMIC);
 581        if (!use) {
 582                printk("%s: out of memory loading\n", a->name);
 583                module_put(b);
 584                return 0;
 585        }
 586
 587        use->module_which_uses = a;
 588        list_add(&use->list, &b->modules_which_use_me);
 589        no_warn = sysfs_create_link(b->holders_dir, &a->mkobj.kobj, a->name);
 590        return 1;
 591}
 592
 593/* Clear the unload stuff of the module. */
 594static void module_unload_free(struct module *mod)
 595{
 596        struct module *i;
 597
 598        list_for_each_entry(i, &modules, list) {
 599                struct module_use *use;
 600
 601                list_for_each_entry(use, &i->modules_which_use_me, list) {
 602                        if (use->module_which_uses == mod) {
 603                                DEBUGP("%s unusing %s\n", mod->name, i->name);
 604                                module_put(i);
 605                                list_del(&use->list);
 606                                kfree(use);
 607                                sysfs_remove_link(i->holders_dir, mod->name);
 608                                /* There can be at most one match. */
 609                                break;
 610                        }
 611                }
 612        }
 613}
 614
 615#ifdef CONFIG_MODULE_FORCE_UNLOAD
 616static inline int try_force_unload(unsigned int flags)
 617{
 618        int ret = (flags & O_TRUNC);
 619        if (ret)
 620                add_taint(TAINT_FORCED_RMMOD);
 621        return ret;
 622}
 623#else
 624static inline int try_force_unload(unsigned int flags)
 625{
 626        return 0;
 627}
 628#endif /* CONFIG_MODULE_FORCE_UNLOAD */
 629
 630struct stopref
 631{
 632        struct module *mod;
 633        int flags;
 634        int *forced;
 635};
 636
 637/* Whole machine is stopped with interrupts off when this runs. */
 638static int __try_stop_module(void *_sref)
 639{
 640        struct stopref *sref = _sref;
 641
 642        /* If it's not unused, quit unless we are told to block. */
 643        if ((sref->flags & O_NONBLOCK) && module_refcount(sref->mod) != 0) {
 644                if (!(*sref->forced = try_force_unload(sref->flags)))
 645                        return -EWOULDBLOCK;
 646        }
 647
 648        /* Mark it as dying. */
 649        sref->mod->state = MODULE_STATE_GOING;
 650        return 0;
 651}
 652
 653static int try_stop_module(struct module *mod, int flags, int *forced)
 654{
 655        struct stopref sref = { mod, flags, forced };
 656
 657        return stop_machine_run(__try_stop_module, &sref, NR_CPUS);
 658}
 659
 660unsigned int module_refcount(struct module *mod)
 661{
 662        unsigned int i, total = 0;
 663
 664        for (i = 0; i < NR_CPUS; i++)
 665                total += local_read(&mod->ref[i].count);
 666        return total;
 667}
 668EXPORT_SYMBOL(module_refcount);
 669
 670/* This exists whether we can unload or not */
 671static void free_module(struct module *mod);
 672
 673static void wait_for_zero_refcount(struct module *mod)
 674{
 675        /* Since we might sleep for some time, release the mutex first */
 676        mutex_unlock(&module_mutex);
 677        for (;;) {
 678                DEBUGP("Looking at refcount...\n");
 679                set_current_state(TASK_UNINTERRUPTIBLE);
 680                if (module_refcount(mod) == 0)
 681                        break;
 682                schedule();
 683        }
 684        current->state = TASK_RUNNING;
 685        mutex_lock(&module_mutex);
 686}
 687
 688asmlinkage long
 689sys_delete_module(const char __user *name_user, unsigned int flags)
 690{
 691        struct module *mod;
 692        char name[MODULE_NAME_LEN];
 693        int ret, forced = 0;
 694
 695        if (!capable(CAP_SYS_MODULE))
 696                return -EPERM;
 697
 698        if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
 699                return -EFAULT;
 700        name[MODULE_NAME_LEN-1] = '\0';
 701
 702        if (mutex_lock_interruptible(&module_mutex) != 0)
 703                return -EINTR;
 704
 705        mod = find_module(name);
 706        if (!mod) {
 707                ret = -ENOENT;
 708                goto out;
 709        }
 710
 711        if (!list_empty(&mod->modules_which_use_me)) {
 712                /* Other modules depend on us: get rid of them first. */
 713                ret = -EWOULDBLOCK;
 714                goto out;
 715        }
 716
 717        /* Doing init or already dying? */
 718        if (mod->state != MODULE_STATE_LIVE) {
 719                /* FIXME: if (force), slam module count and wake up
 720                   waiter --RR */
 721                DEBUGP("%s already dying\n", mod->name);
 722                ret = -EBUSY;
 723                goto out;
 724        }
 725
 726        /* If it has an init func, it must have an exit func to unload */
 727        if (mod->init && !mod->exit) {
 728                forced = try_force_unload(flags);
 729                if (!forced) {
 730                        /* This module can't be removed */
 731                        ret = -EBUSY;
 732                        goto out;
 733                }
 734        }
 735
 736        /* Set this up before setting mod->state */
 737        mod->waiter = current;
 738
 739        /* Stop the machine so refcounts can't move and disable module. */
 740        ret = try_stop_module(mod, flags, &forced);
 741        if (ret != 0)
 742                goto out;
 743
 744        /* Never wait if forced. */
 745        if (!forced && module_refcount(mod) != 0)
 746                wait_for_zero_refcount(mod);
 747
 748        mutex_unlock(&module_mutex);
 749        /* Final destruction now noone is using it. */
 750        if (mod->exit != NULL)
 751                mod->exit();
 752        blocking_notifier_call_chain(&module_notify_list,
 753                                     MODULE_STATE_GOING, mod);
 754        mutex_lock(&module_mutex);
 755        /* Store the name of the last unloaded module for diagnostic purposes */
 756        strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
 757        free_module(mod);
 758
 759 out:
 760        mutex_unlock(&module_mutex);
 761        return ret;
 762}
 763
 764static void print_unload_info(struct seq_file *m, struct module *mod)
 765{
 766        struct module_use *use;
 767        int printed_something = 0;
 768
 769        seq_printf(m, " %u ", module_refcount(mod));
 770
 771        /* Always include a trailing , so userspace can differentiate
 772           between this and the old multi-field proc format. */
 773        list_for_each_entry(use, &mod->modules_which_use_me, list) {
 774                printed_something = 1;
 775                seq_printf(m, "%s,", use->module_which_uses->name);
 776        }
 777
 778        if (mod->init != NULL && mod->exit == NULL) {
 779                printed_something = 1;
 780                seq_printf(m, "[permanent],");
 781        }
 782
 783        if (!printed_something)
 784                seq_printf(m, "-");
 785}
 786
 787void __symbol_put(const char *symbol)
 788{
 789        struct module *owner;
 790
 791        preempt_disable();
 792        if (IS_ERR_VALUE(find_symbol(symbol, &owner, NULL, true, false)))
 793                BUG();
 794        module_put(owner);
 795        preempt_enable();
 796}
 797EXPORT_SYMBOL(__symbol_put);
 798
 799void symbol_put_addr(void *addr)
 800{
 801        struct module *modaddr;
 802
 803        if (core_kernel_text((unsigned long)addr))
 804                return;
 805
 806        if (!(modaddr = module_text_address((unsigned long)addr)))
 807                BUG();
 808        module_put(modaddr);
 809}
 810EXPORT_SYMBOL_GPL(symbol_put_addr);
 811
 812static ssize_t show_refcnt(struct module_attribute *mattr,
 813                           struct module *mod, char *buffer)
 814{
 815        return sprintf(buffer, "%u\n", module_refcount(mod));
 816}
 817
 818static struct module_attribute refcnt = {
 819        .attr = { .name = "refcnt", .mode = 0444 },
 820        .show = show_refcnt,
 821};
 822
 823void module_put(struct module *module)
 824{
 825        if (module) {
 826                unsigned int cpu = get_cpu();
 827                local_dec(&module->ref[cpu].count);
 828                /* Maybe they're waiting for us to drop reference? */
 829                if (unlikely(!module_is_live(module)))
 830                        wake_up_process(module->waiter);
 831                put_cpu();
 832        }
 833}
 834EXPORT_SYMBOL(module_put);
 835
 836#else /* !CONFIG_MODULE_UNLOAD */
 837static void print_unload_info(struct seq_file *m, struct module *mod)
 838{
 839        /* We don't know the usage count, or what modules are using. */
 840        seq_printf(m, " - -");
 841}
 842
 843static inline void module_unload_free(struct module *mod)
 844{
 845}
 846
 847static inline int use_module(struct module *a, struct module *b)
 848{
 849        return strong_try_module_get(b) == 0;
 850}
 851
 852static inline void module_unload_init(struct module *mod)
 853{
 854}
 855#endif /* CONFIG_MODULE_UNLOAD */
 856
 857static ssize_t show_initstate(struct module_attribute *mattr,
 858                           struct module *mod, char *buffer)
 859{
 860        const char *state = "unknown";
 861
 862        switch (mod->state) {
 863        case MODULE_STATE_LIVE:
 864                state = "live";
 865                break;
 866        case MODULE_STATE_COMING:
 867                state = "coming";
 868                break;
 869        case MODULE_STATE_GOING:
 870                state = "going";
 871                break;
 872        }
 873        return sprintf(buffer, "%s\n", state);
 874}
 875
 876static struct module_attribute initstate = {
 877        .attr = { .name = "initstate", .mode = 0444 },
 878        .show = show_initstate,
 879};
 880
 881static struct module_attribute *modinfo_attrs[] = {
 882        &modinfo_version,
 883        &modinfo_srcversion,
 884        &initstate,
 885#ifdef CONFIG_MODULE_UNLOAD
 886        &refcnt,
 887#endif
 888        NULL,
 889};
 890
 891static const char vermagic[] = VERMAGIC_STRING;
 892
 893static int try_to_force_load(struct module *mod, const char *symname)
 894{
 895#ifdef CONFIG_MODULE_FORCE_LOAD
 896        if (!(tainted & TAINT_FORCED_MODULE))
 897                printk("%s: no version for \"%s\" found: kernel tainted.\n",
 898                       mod->name, symname);
 899        add_taint_module(mod, TAINT_FORCED_MODULE);
 900        return 0;
 901#else
 902        return -ENOEXEC;
 903#endif
 904}
 905
 906#ifdef CONFIG_MODVERSIONS
 907static int check_version(Elf_Shdr *sechdrs,
 908                         unsigned int versindex,
 909                         const char *symname,
 910                         struct module *mod, 
 911                         const unsigned long *crc)
 912{
 913        unsigned int i, num_versions;
 914        struct modversion_info *versions;
 915
 916        /* Exporting module didn't supply crcs?  OK, we're already tainted. */
 917        if (!crc)
 918                return 1;
 919
 920        /* No versions at all?  modprobe --force does this. */
 921        if (versindex == 0)
 922                return try_to_force_load(mod, symname) == 0;
 923
 924        versions = (void *) sechdrs[versindex].sh_addr;
 925        num_versions = sechdrs[versindex].sh_size
 926                / sizeof(struct modversion_info);
 927
 928        for (i = 0; i < num_versions; i++) {
 929                if (strcmp(versions[i].name, symname) != 0)
 930                        continue;
 931
 932                if (versions[i].crc == *crc)
 933                        return 1;
 934                DEBUGP("Found checksum %lX vs module %lX\n",
 935                       *crc, versions[i].crc);
 936                goto bad_version;
 937        }
 938
 939        printk(KERN_WARNING "%s: no symbol version for %s\n",
 940               mod->name, symname);
 941        return 0;
 942
 943bad_version:
 944        printk("%s: disagrees about version of symbol %s\n",
 945               mod->name, symname);
 946        return 0;
 947}
 948
 949static inline int check_modstruct_version(Elf_Shdr *sechdrs,
 950                                          unsigned int versindex,
 951                                          struct module *mod)
 952{
 953        const unsigned long *crc;
 954
 955        if (IS_ERR_VALUE(find_symbol("struct_module", NULL, &crc, true, false)))
 956                BUG();
 957        return check_version(sechdrs, versindex, "struct_module", mod, crc);
 958}
 959
 960/* First part is kernel version, which we ignore if module has crcs. */
 961static inline int same_magic(const char *amagic, const char *bmagic,
 962                             bool has_crcs)
 963{
 964        if (has_crcs) {
 965                amagic += strcspn(amagic, " ");
 966                bmagic += strcspn(bmagic, " ");
 967        }
 968        return strcmp(amagic, bmagic) == 0;
 969}
 970#else
 971static inline int check_version(Elf_Shdr *sechdrs,
 972                                unsigned int versindex,
 973                                const char *symname,
 974                                struct module *mod, 
 975                                const unsigned long *crc)
 976{
 977        return 1;
 978}
 979
 980static inline int check_modstruct_version(Elf_Shdr *sechdrs,
 981                                          unsigned int versindex,
 982                                          struct module *mod)
 983{
 984        return 1;
 985}
 986
 987static inline int same_magic(const char *amagic, const char *bmagic,
 988                             bool has_crcs)
 989{
 990        return strcmp(amagic, bmagic) == 0;
 991}
 992#endif /* CONFIG_MODVERSIONS */
 993
 994/* Resolve a symbol for this module.  I.e. if we find one, record usage.
 995   Must be holding module_mutex. */
 996static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
 997                                    unsigned int versindex,
 998                                    const char *name,
 999                                    struct module *mod)
1000{
1001        struct module *owner;
1002        unsigned long ret;
1003        const unsigned long *crc;
1004
1005        ret = find_symbol(name, &owner, &crc,
1006                          !(mod->taints & TAINT_PROPRIETARY_MODULE), true);
1007        if (!IS_ERR_VALUE(ret)) {
1008                /* use_module can fail due to OOM,
1009                   or module initialization or unloading */
1010                if (!check_version(sechdrs, versindex, name, mod, crc) ||
1011                    !use_module(mod, owner))
1012                        ret = -EINVAL;
1013        }
1014        return ret;
1015}
1016
1017/*
1018 * /sys/module/foo/sections stuff
1019 * J. Corbet <corbet@lwn.net>
1020 */
1021#if defined(CONFIG_KALLSYMS) && defined(CONFIG_SYSFS)
1022struct module_sect_attr
1023{
1024        struct module_attribute mattr;
1025        char *name;
1026        unsigned long address;
1027};
1028
1029struct module_sect_attrs
1030{
1031        struct attribute_group grp;
1032        unsigned int nsections;
1033        struct module_sect_attr attrs[0];
1034};
1035
1036static ssize_t module_sect_show(struct module_attribute *mattr,
1037                                struct module *mod, char *buf)
1038{
1039        struct module_sect_attr *sattr =
1040                container_of(mattr, struct module_sect_attr, mattr);
1041        return sprintf(buf, "0x%lx\n", sattr->address);
1042}
1043
1044static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
1045{
1046        unsigned int section;
1047
1048        for (section = 0; section < sect_attrs->nsections; section++)
1049                kfree(sect_attrs->attrs[section].name);
1050        kfree(sect_attrs);
1051}
1052
1053static void add_sect_attrs(struct module *mod, unsigned int nsect,
1054                char *secstrings, Elf_Shdr *sechdrs)
1055{
1056        unsigned int nloaded = 0, i, size[2];
1057        struct module_sect_attrs *sect_attrs;
1058        struct module_sect_attr *sattr;
1059        struct attribute **gattr;
1060
1061        /* Count loaded sections and allocate structures */
1062        for (i = 0; i < nsect; i++)
1063                if (sechdrs[i].sh_flags & SHF_ALLOC)
1064                        nloaded++;
1065        size[0] = ALIGN(sizeof(*sect_attrs)
1066                        + nloaded * sizeof(sect_attrs->attrs[0]),
1067                        sizeof(sect_attrs->grp.attrs[0]));
1068        size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]);
1069        sect_attrs = kzalloc(size[0] + size[1], GFP_KERNEL);
1070        if (sect_attrs == NULL)
1071                return;
1072
1073        /* Setup section attributes. */
1074        sect_attrs->grp.name = "sections";
1075        sect_attrs->grp.attrs = (void *)sect_attrs + size[0];
1076
1077        sect_attrs->nsections = 0;
1078        sattr = &sect_attrs->attrs[0];
1079        gattr = &sect_attrs->grp.attrs[0];
1080        for (i = 0; i < nsect; i++) {
1081                if (! (sechdrs[i].sh_flags & SHF_ALLOC))
1082                        continue;
1083                sattr->address = sechdrs[i].sh_addr;
1084                sattr->name = kstrdup(secstrings + sechdrs[i].sh_name,
1085                                        GFP_KERNEL);
1086                if (sattr->name == NULL)
1087                        goto out;
1088                sect_attrs->nsections++;
1089                sattr->mattr.show = module_sect_show;
1090                sattr->mattr.store = NULL;
1091                sattr->mattr.attr.name = sattr->name;
1092                sattr->mattr.attr.mode = S_IRUGO;
1093                *(gattr++) = &(sattr++)->mattr.attr;
1094        }
1095        *gattr = NULL;
1096
1097        if (sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp))
1098                goto out;
1099
1100        mod->sect_attrs = sect_attrs;
1101        return;
1102  out:
1103        free_sect_attrs(sect_attrs);
1104}
1105
1106static void remove_sect_attrs(struct module *mod)
1107{
1108        if (mod->sect_attrs) {
1109                sysfs_remove_group(&mod->mkobj.kobj,
1110                                   &mod->sect_attrs->grp);
1111                /* We are positive that no one is using any sect attrs
1112                 * at this point.  Deallocate immediately. */
1113                free_sect_attrs(mod->sect_attrs);
1114                mod->sect_attrs = NULL;
1115        }
1116}
1117
1118/*
1119 * /sys/module/foo/notes/.section.name gives contents of SHT_NOTE sections.
1120 */
1121
1122struct module_notes_attrs {
1123        struct kobject *dir;
1124        unsigned int notes;
1125        struct bin_attribute attrs[0];
1126};
1127
1128static ssize_t module_notes_read(struct kobject *kobj,
1129                                 struct bin_attribute *bin_attr,
1130                                 char *buf, loff_t pos, size_t count)
1131{
1132        /*
1133         * The caller checked the pos and count against our size.
1134         */
1135        memcpy(buf, bin_attr->private + pos, count);
1136        return count;
1137}
1138
1139static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
1140                             unsigned int i)
1141{
1142        if (notes_attrs->dir) {
1143                while (i-- > 0)
1144                        sysfs_remove_bin_file(notes_attrs->dir,
1145                                              &notes_attrs->attrs[i]);
1146                kobject_del(notes_attrs->dir);
1147        }
1148        kfree(notes_attrs);
1149}
1150
1151static void add_notes_attrs(struct module *mod, unsigned int nsect,
1152                            char *secstrings, Elf_Shdr *sechdrs)
1153{
1154        unsigned int notes, loaded, i;
1155        struct module_notes_attrs *notes_attrs;
1156        struct bin_attribute *nattr;
1157
1158        /* Count notes sections and allocate structures.  */
1159        notes = 0;
1160        for (i = 0; i < nsect; i++)
1161                if ((sechdrs[i].sh_flags & SHF_ALLOC) &&
1162                    (sechdrs[i].sh_type == SHT_NOTE))
1163                        ++notes;
1164
1165        if (notes == 0)
1166                return;
1167
1168        notes_attrs = kzalloc(sizeof(*notes_attrs)
1169                              + notes * sizeof(notes_attrs->attrs[0]),
1170                              GFP_KERNEL);
1171        if (notes_attrs == NULL)
1172                return;
1173
1174        notes_attrs->notes = notes;
1175        nattr = &notes_attrs->attrs[0];
1176        for (loaded = i = 0; i < nsect; ++i) {
1177                if (!(sechdrs[i].sh_flags & SHF_ALLOC))
1178                        continue;
1179                if (sechdrs[i].sh_type == SHT_NOTE) {
1180                        nattr->attr.name = mod->sect_attrs->attrs[loaded].name;
1181                        nattr->attr.mode = S_IRUGO;
1182                        nattr->size = sechdrs[i].sh_size;
1183                        nattr->private = (void *) sechdrs[i].sh_addr;
1184                        nattr->read = module_notes_read;
1185                        ++nattr;
1186                }
1187                ++loaded;
1188        }
1189
1190        notes_attrs->dir = kobject_create_and_add("notes", &mod->mkobj.kobj);
1191        if (!notes_attrs->dir)
1192                goto out;
1193
1194        for (i = 0; i < notes; ++i)
1195                if (sysfs_create_bin_file(notes_attrs->dir,
1196                                          &notes_attrs->attrs[i]))
1197                        goto out;
1198
1199        mod->notes_attrs = notes_attrs;
1200        return;
1201
1202  out:
1203        free_notes_attrs(notes_attrs, i);
1204}
1205
1206static void remove_notes_attrs(struct module *mod)
1207{
1208        if (mod->notes_attrs)
1209                free_notes_attrs(mod->notes_attrs, mod->notes_attrs->notes);
1210}
1211
1212#else
1213
1214static inline void add_sect_attrs(struct module *mod, unsigned int nsect,
1215                char *sectstrings, Elf_Shdr *sechdrs)
1216{
1217}
1218
1219static inline void remove_sect_attrs(struct module *mod)
1220{
1221}
1222
1223static inline void add_notes_attrs(struct module *mod, unsigned int nsect,
1224                                   char *sectstrings, Elf_Shdr *sechdrs)
1225{
1226}
1227
1228static inline void remove_notes_attrs(struct module *mod)
1229{
1230}
1231#endif
1232
1233#ifdef CONFIG_SYSFS
1234int module_add_modinfo_attrs(struct module *mod)
1235{
1236        struct module_attribute *attr;
1237        struct module_attribute *temp_attr;
1238        int error = 0;
1239        int i;
1240
1241        mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
1242                                        (ARRAY_SIZE(modinfo_attrs) + 1)),
1243                                        GFP_KERNEL);
1244        if (!mod->modinfo_attrs)
1245                return -ENOMEM;
1246
1247        temp_attr = mod->modinfo_attrs;
1248        for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
1249                if (!attr->test ||
1250                    (attr->test && attr->test(mod))) {
1251                        memcpy(temp_attr, attr, sizeof(*temp_attr));
1252                        error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr);
1253                        ++temp_attr;
1254                }
1255        }
1256        return error;
1257}
1258
1259void module_remove_modinfo_attrs(struct module *mod)
1260{
1261        struct module_attribute *attr;
1262        int i;
1263
1264        for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
1265                /* pick a field to test for end of list */
1266                if (!attr->attr.name)
1267                        break;
1268                sysfs_remove_file(&mod->mkobj.kobj,&attr->attr);
1269                if (attr->free)
1270                        attr->free(mod);
1271        }
1272        kfree(mod->modinfo_attrs);
1273}
1274
1275int mod_sysfs_init(struct module *mod)
1276{
1277        int err;
1278        struct kobject *kobj;
1279
1280        if (!module_sysfs_initialized) {
1281                printk(KERN_ERR "%s: module sysfs not initialized\n",
1282                       mod->name);
1283                err = -EINVAL;
1284                goto out;
1285        }
1286
1287        kobj = kset_find_obj(module_kset, mod->name);
1288        if (kobj) {
1289                printk(KERN_ERR "%s: module is already loaded\n", mod->name);
1290                kobject_put(kobj);
1291                err = -EINVAL;
1292                goto out;
1293        }
1294
1295        mod->mkobj.mod = mod;
1296
1297        memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj));
1298        mod->mkobj.kobj.kset = module_kset;
1299        err = kobject_init_and_add(&mod->mkobj.kobj, &module_ktype, NULL,
1300                                   "%s", mod->name);
1301        if (err)
1302                kobject_put(&mod->mkobj.kobj);
1303
1304        /* delay uevent until full sysfs population */
1305out:
1306        return err;
1307}
1308
1309int mod_sysfs_setup(struct module *mod,
1310                           struct kernel_param *kparam,
1311                           unsigned int num_params)
1312{
1313        int err;
1314
1315        mod->holders_dir = kobject_create_and_add("holders", &mod->mkobj.kobj);
1316        if (!mod->holders_dir) {
1317                err = -ENOMEM;
1318                goto out_unreg;
1319        }
1320
1321        err = module_param_sysfs_setup(mod, kparam, num_params);
1322        if (err)
1323                goto out_unreg_holders;
1324
1325        err = module_add_modinfo_attrs(mod);
1326        if (err)
1327                goto out_unreg_param;
1328
1329        kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD);
1330        return 0;
1331
1332out_unreg_param:
1333        module_param_sysfs_remove(mod);
1334out_unreg_holders:
1335        kobject_put(mod->holders_dir);
1336out_unreg:
1337        kobject_put(&mod->mkobj.kobj);
1338        return err;
1339}
1340
1341static void mod_sysfs_fini(struct module *mod)
1342{
1343        kobject_put(&mod->mkobj.kobj);
1344}
1345
1346#else /* CONFIG_SYSFS */
1347
1348static void mod_sysfs_fini(struct module *mod)
1349{
1350}
1351
1352#endif /* CONFIG_SYSFS */
1353
1354static void mod_kobject_remove(struct module *mod)
1355{
1356        module_remove_modinfo_attrs(mod);
1357        module_param_sysfs_remove(mod);
1358        kobject_put(mod->mkobj.drivers_dir);
1359        kobject_put(mod->holders_dir);
1360        mod_sysfs_fini(mod);
1361}
1362
1363/*
1364 * link the module with the whole machine is stopped with interrupts off
1365 * - this defends against kallsyms not taking locks
1366 */
1367static int __link_module(void *_mod)
1368{
1369        struct module *mod = _mod;
1370        list_add(&mod->list, &modules);
1371        return 0;
1372}
1373
1374/*
1375 * unlink the module with the whole machine is stopped with interrupts off
1376 * - this defends against kallsyms not taking locks
1377 */
1378static int __unlink_module(void *_mod)
1379{
1380        struct module *mod = _mod;
1381        list_del(&mod->list);
1382        return 0;
1383}
1384
1385/* Free a module, remove from lists, etc (must hold module_mutex). */
1386static void free_module(struct module *mod)
1387{
1388        /* Delete from various lists */
1389        stop_machine_run(__unlink_module, mod, NR_CPUS);
1390        remove_notes_attrs(mod);
1391        remove_sect_attrs(mod);
1392        mod_kobject_remove(mod);
1393
1394        unwind_remove_table(mod->unwind_info, 0);
1395
1396        /* Arch-specific cleanup. */
1397        module_arch_cleanup(mod);
1398
1399        /* Module unload stuff */
1400        module_unload_free(mod);
1401
1402        /* This may be NULL, but that's OK */
1403        module_free(mod, mod->module_init);
1404        kfree(mod->args);
1405        if (mod->percpu)
1406                percpu_modfree(mod->percpu);
1407
1408        /* Free lock-classes: */
1409        lockdep_free_key_range(mod->module_core, mod->core_size);
1410
1411        /* Finally, free the core (containing the module structure) */
1412        module_free(mod, mod->module_core);
1413}
1414
1415void *__symbol_get(const char *symbol)
1416{
1417        struct module *owner;
1418        unsigned long value;
1419
1420        preempt_disable();
1421        value = find_symbol(symbol, &owner, NULL, true, true);
1422        if (IS_ERR_VALUE(value))
1423                value = 0;
1424        else if (strong_try_module_get(owner))
1425                value = 0;
1426        preempt_enable();
1427
1428        return (void *)value;
1429}
1430EXPORT_SYMBOL_GPL(__symbol_get);
1431
1432/*
1433 * Ensure that an exported symbol [global namespace] does not already exist
1434 * in the kernel or in some other module's exported symbol table.
1435 */
1436static int verify_export_symbols(struct module *mod)
1437{
1438        unsigned int i;
1439        struct module *owner;
1440        const struct kernel_symbol *s;
1441        struct {
1442                const struct kernel_symbol *sym;
1443                unsigned int num;
1444        } arr[] = {
1445                { mod->syms, mod->num_syms },
1446                { mod->gpl_syms, mod->num_gpl_syms },
1447                { mod->gpl_future_syms, mod->num_gpl_future_syms },
1448                { mod->unused_syms, mod->num_unused_syms },
1449                { mod->unused_gpl_syms, mod->num_unused_gpl_syms },
1450        };
1451
1452        for (i = 0; i < ARRAY_SIZE(arr); i++) {
1453                for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
1454                        if (!IS_ERR_VALUE(find_symbol(s->name, &owner,
1455                                                      NULL, true, false))) {
1456                                printk(KERN_ERR
1457                                       "%s: exports duplicate symbol %s"
1458                                       " (owned by %s)\n",
1459                                       mod->name, s->name, module_name(owner));
1460                                return -ENOEXEC;
1461                        }
1462                }
1463        }
1464        return 0;
1465}
1466
1467/* Change all symbols so that st_value encodes the pointer directly. */
1468static int simplify_symbols(Elf_Shdr *sechdrs,
1469                            unsigned int symindex,
1470                            const char *strtab,
1471                            unsigned int versindex,
1472                            unsigned int pcpuindex,
1473                            struct module *mod)
1474{
1475        Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
1476        unsigned long secbase;
1477        unsigned int i, n = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1478        int ret = 0;
1479
1480        for (i = 1; i < n; i++) {
1481                switch (sym[i].st_shndx) {
1482                case SHN_COMMON:
1483                        /* We compiled with -fno-common.  These are not
1484                           supposed to happen.  */
1485                        DEBUGP("Common symbol: %s\n", strtab + sym[i].st_name);
1486                        printk("%s: please compile with -fno-common\n",
1487                               mod->name);
1488                        ret = -ENOEXEC;
1489                        break;
1490
1491                case SHN_ABS:
1492                        /* Don't need to do anything */
1493                        DEBUGP("Absolute symbol: 0x%08lx\n",
1494                               (long)sym[i].st_value);
1495                        break;
1496
1497                case SHN_UNDEF:
1498                        sym[i].st_value
1499                          = resolve_symbol(sechdrs, versindex,
1500                                           strtab + sym[i].st_name, mod);
1501
1502                        /* Ok if resolved.  */
1503                        if (!IS_ERR_VALUE(sym[i].st_value))
1504                                break;
1505                        /* Ok if weak.  */
1506                        if (ELF_ST_BIND(sym[i].st_info) == STB_WEAK)
1507                                break;
1508
1509                        printk(KERN_WARNING "%s: Unknown symbol %s\n",
1510                               mod->name, strtab + sym[i].st_name);
1511                        ret = -ENOENT;
1512                        break;
1513
1514                default:
1515                        /* Divert to percpu allocation if a percpu var. */
1516                        if (sym[i].st_shndx == pcpuindex)
1517                                secbase = (unsigned long)mod->percpu;
1518                        else
1519                                secbase = sechdrs[sym[i].st_shndx].sh_addr;
1520                        sym[i].st_value += secbase;
1521                        break;
1522                }
1523        }
1524
1525        return ret;
1526}
1527
1528/* Update size with this section: return offset. */
1529static long get_offset(unsigned long *size, Elf_Shdr *sechdr)
1530{
1531        long ret;
1532
1533        ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
1534        *size = ret + sechdr->sh_size;
1535        return ret;
1536}
1537
1538/* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
1539   might -- code, read-only data, read-write data, small data.  Tally
1540   sizes, and place the offsets into sh_entsize fields: high bit means it
1541   belongs in init. */
1542static void layout_sections(struct module *mod,
1543                            const Elf_Ehdr *hdr,
1544                            Elf_Shdr *sechdrs,
1545                            const char *secstrings)
1546{
1547        static unsigned long const masks[][2] = {
1548                /* NOTE: all executable code must be the first section
1549                 * in this array; otherwise modify the text_size
1550                 * finder in the two loops below */
1551                { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
1552                { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
1553                { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
1554                { ARCH_SHF_SMALL | SHF_ALLOC, 0 }
1555        };
1556        unsigned int m, i;
1557
1558        for (i = 0; i < hdr->e_shnum; i++)
1559                sechdrs[i].sh_entsize = ~0UL;
1560
1561        DEBUGP("Core section allocation order:\n");
1562        for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1563                for (i = 0; i < hdr->e_shnum; ++i) {
1564                        Elf_Shdr *s = &sechdrs[i];
1565
1566                        if ((s->sh_flags & masks[m][0]) != masks[m][0]
1567                            || (s->sh_flags & masks[m][1])
1568                            || s->sh_entsize != ~0UL
1569                            || strncmp(secstrings + s->sh_name,
1570                                       ".init", 5) == 0)
1571                                continue;
1572                        s->sh_entsize = get_offset(&mod->core_size, s);
1573                        DEBUGP("\t%s\n", secstrings + s->sh_name);
1574                }
1575                if (m == 0)
1576                        mod->core_text_size = mod->core_size;
1577        }
1578
1579        DEBUGP("Init section allocation order:\n");
1580        for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1581                for (i = 0; i < hdr->e_shnum; ++i) {
1582                        Elf_Shdr *s = &sechdrs[i];
1583
1584                        if ((s->sh_flags & masks[m][0]) != masks[m][0]
1585                            || (s->sh_flags & masks[m][1])
1586                            || s->sh_entsize != ~0UL
1587                            || strncmp(secstrings + s->sh_name,
1588                                       ".init", 5) != 0)
1589                                continue;
1590                        s->sh_entsize = (get_offset(&mod->init_size, s)
1591                                         | INIT_OFFSET_MASK);
1592                        DEBUGP("\t%s\n", secstrings + s->sh_name);
1593                }
1594                if (m == 0)
1595                        mod->init_text_size = mod->init_size;
1596        }
1597}
1598
1599static void set_license(struct module *mod, const char *license)
1600{
1601        if (!license)
1602                license = "unspecified";
1603
1604        if (!license_is_gpl_compatible(license)) {
1605                if (!(tainted & TAINT_PROPRIETARY_MODULE))
1606                        printk(KERN_WARNING "%s: module license '%s' taints "
1607                                "kernel.\n", mod->name, license);
1608                add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
1609        }
1610}
1611
1612/* Parse tag=value strings from .modinfo section */
1613static char *next_string(char *string, unsigned long *secsize)
1614{
1615        /* Skip non-zero chars */
1616        while (string[0]) {
1617                string++;
1618                if ((*secsize)-- <= 1)
1619                        return NULL;
1620        }
1621
1622        /* Skip any zero padding. */
1623        while (!string[0]) {
1624                string++;
1625                if ((*secsize)-- <= 1)
1626                        return NULL;
1627        }
1628        return string;
1629}
1630
1631static char *get_modinfo(Elf_Shdr *sechdrs,
1632                         unsigned int info,
1633                         const char *tag)
1634{
1635        char *p;
1636        unsigned int taglen = strlen(tag);
1637        unsigned long size = sechdrs[info].sh_size;
1638
1639        for (p = (char *)sechdrs[info].sh_addr; p; p = next_string(p, &size)) {
1640                if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
1641                        return p + taglen + 1;
1642        }
1643        return NULL;
1644}
1645
1646static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
1647                          unsigned int infoindex)
1648{
1649        struct module_attribute *attr;
1650        int i;
1651
1652        for (i = 0; (attr = modinfo_attrs[i]); i++) {
1653                if (attr->setup)
1654                        attr->setup(mod,
1655                                    get_modinfo(sechdrs,
1656                                                infoindex,
1657                                                attr->attr.name));
1658        }
1659}
1660
1661#ifdef CONFIG_KALLSYMS
1662static int is_exported(const char *name, const struct module *mod)
1663{
1664        if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab))
1665                return 1;
1666        else
1667                if (mod && lookup_symbol(name, mod->syms, mod->syms + mod->num_syms))
1668                        return 1;
1669                else
1670                        return 0;
1671}
1672
1673/* As per nm */
1674static char elf_type(const Elf_Sym *sym,
1675                     Elf_Shdr *sechdrs,
1676                     const char *secstrings,
1677                     struct module *mod)
1678{
1679        if (ELF_ST_BIND(sym->st_info) == STB_WEAK) {
1680                if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT)
1681                        return 'v';
1682                else
1683                        return 'w';
1684        }
1685        if (sym->st_shndx == SHN_UNDEF)
1686                return 'U';
1687        if (sym->st_shndx == SHN_ABS)
1688                return 'a';
1689        if (sym->st_shndx >= SHN_LORESERVE)
1690                return '?';
1691        if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR)
1692                return 't';
1693        if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC
1694            && sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) {
1695                if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE))
1696                        return 'r';
1697                else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1698                        return 'g';
1699                else
1700                        return 'd';
1701        }
1702        if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) {
1703                if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1704                        return 's';
1705                else
1706                        return 'b';
1707        }
1708        if (strncmp(secstrings + sechdrs[sym->st_shndx].sh_name,
1709                    ".debug", strlen(".debug")) == 0)
1710                return 'n';
1711        return '?';
1712}
1713
1714static void add_kallsyms(struct module *mod,
1715                         Elf_Shdr *sechdrs,
1716                         unsigned int symindex,
1717                         unsigned int strindex,
1718                         const char *secstrings)
1719{
1720        unsigned int i;
1721
1722        mod->symtab = (void *)sechdrs[symindex].sh_addr;
1723        mod->num_symtab = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1724        mod->strtab = (void *)sechdrs[strindex].sh_addr;
1725
1726        /* Set types up while we still have access to sections. */
1727        for (i = 0; i < mod->num_symtab; i++)
1728                mod->symtab[i].st_info
1729                        = elf_type(&mod->symtab[i], sechdrs, secstrings, mod);
1730}
1731#else
1732static inline void add_kallsyms(struct module *mod,
1733                                Elf_Shdr *sechdrs,
1734                                unsigned int symindex,
1735                                unsigned int strindex,
1736                                const char *secstrings)
1737{
1738}
1739#endif /* CONFIG_KALLSYMS */
1740
1741/* Allocate and load the module: note that size of section 0 is always
1742   zero, and we rely on this for optional sections. */
1743static struct module *load_module(void __user *umod,
1744                                  unsigned long len,
1745                                  const char __user *uargs)
1746{
1747        Elf_Ehdr *hdr;
1748        Elf_Shdr *sechdrs;
1749        char *secstrings, *args, *modmagic, *strtab = NULL;
1750        unsigned int i;
1751        unsigned int symindex = 0;
1752        unsigned int strindex = 0;
1753        unsigned int setupindex;
1754        unsigned int exindex;
1755        unsigned int exportindex;
1756        unsigned int modindex;
1757        unsigned int obsparmindex;
1758        unsigned int infoindex;
1759        unsigned int gplindex;
1760        unsigned int crcindex;
1761        unsigned int gplcrcindex;
1762        unsigned int versindex;
1763        unsigned int pcpuindex;
1764        unsigned int gplfutureindex;
1765        unsigned int gplfuturecrcindex;
1766        unsigned int unwindex = 0;
1767        unsigned int unusedindex;
1768        unsigned int unusedcrcindex;
1769        unsigned int unusedgplindex;
1770        unsigned int unusedgplcrcindex;
1771        unsigned int markersindex;
1772        unsigned int markersstringsindex;
1773        struct module *mod;
1774        long err = 0;
1775        void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
1776        struct exception_table_entry *extable;
1777        mm_segment_t old_fs;
1778
1779        DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n",
1780               umod, len, uargs);
1781        if (len < sizeof(*hdr))
1782                return ERR_PTR(-ENOEXEC);
1783
1784        /* Suck in entire file: we'll want most of it. */
1785        /* vmalloc barfs on "unusual" numbers.  Check here */
1786        if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL)
1787                return ERR_PTR(-ENOMEM);
1788        if (copy_from_user(hdr, umod, len) != 0) {
1789                err = -EFAULT;
1790                goto free_hdr;
1791        }
1792
1793        /* Sanity checks against insmoding binaries or wrong arch,
1794           weird elf version */
1795        if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0
1796            || hdr->e_type != ET_REL
1797            || !elf_check_arch(hdr)
1798            || hdr->e_shentsize != sizeof(*sechdrs)) {
1799                err = -ENOEXEC;
1800                goto free_hdr;
1801        }
1802
1803        if (len < hdr->e_shoff + hdr->e_shnum * sizeof(Elf_Shdr))
1804                goto truncated;
1805
1806        /* Convenience variables */
1807        sechdrs = (void *)hdr + hdr->e_shoff;
1808        secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
1809        sechdrs[0].sh_addr = 0;
1810
1811        for (i = 1; i < hdr->e_shnum; i++) {
1812                if (sechdrs[i].sh_type != SHT_NOBITS
1813                    && len < sechdrs[i].sh_offset + sechdrs[i].sh_size)
1814                        goto truncated;
1815
1816                /* Mark all sections sh_addr with their address in the
1817                   temporary image. */
1818                sechdrs[i].sh_addr = (size_t)hdr + sechdrs[i].sh_offset;
1819
1820                /* Internal symbols and strings. */
1821                if (sechdrs[i].sh_type == SHT_SYMTAB) {
1822                        symindex = i;
1823                        strindex = sechdrs[i].sh_link;
1824                        strtab = (char *)hdr + sechdrs[strindex].sh_offset;
1825                }
1826#ifndef CONFIG_MODULE_UNLOAD
1827                /* Don't load .exit sections */
1828                if (strncmp(secstrings+sechdrs[i].sh_name, ".exit", 5) == 0)
1829                        sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC;
1830#endif
1831        }
1832
1833        modindex = find_sec(hdr, sechdrs, secstrings,
1834                            ".gnu.linkonce.this_module");
1835        if (!modindex) {
1836                printk(KERN_WARNING "No module found in object\n");
1837                err = -ENOEXEC;
1838                goto free_hdr;
1839        }
1840        mod = (void *)sechdrs[modindex].sh_addr;
1841
1842        if (symindex == 0) {
1843                printk(KERN_WARNING "%s: module has no symbols (stripped?)\n",
1844                       mod->name);
1845                err = -ENOEXEC;
1846                goto free_hdr;
1847        }
1848
1849        /* Optional sections */
1850        exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
1851        gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
1852        gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future");
1853        unusedindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused");
1854        unusedgplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused_gpl");
1855        crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab");
1856        gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl");
1857        gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future");
1858        unusedcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused");
1859        unusedgplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused_gpl");
1860        setupindex = find_sec(hdr, sechdrs, secstrings, "__param");
1861        exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table");
1862        obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm");
1863        versindex = find_sec(hdr, sechdrs, secstrings, "__versions");
1864        infoindex = find_sec(hdr, sechdrs, secstrings, ".modinfo");
1865        pcpuindex = find_pcpusec(hdr, sechdrs, secstrings);
1866#ifdef ARCH_UNWIND_SECTION_NAME
1867        unwindex = find_sec(hdr, sechdrs, secstrings, ARCH_UNWIND_SECTION_NAME);
1868#endif
1869
1870        /* Don't keep modinfo and version sections. */
1871        sechdrs[infoindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1872        sechdrs[versindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1873#ifdef CONFIG_KALLSYMS
1874        /* Keep symbol and string tables for decoding later. */
1875        sechdrs[symindex].sh_flags |= SHF_ALLOC;
1876        sechdrs[strindex].sh_flags |= SHF_ALLOC;
1877#endif
1878        if (unwindex)
1879                sechdrs[unwindex].sh_flags |= SHF_ALLOC;
1880
1881        /* Check module struct version now, before we try to use module. */
1882        if (!check_modstruct_version(sechdrs, versindex, mod)) {
1883                err = -ENOEXEC;
1884                goto free_hdr;
1885        }
1886
1887        modmagic = get_modinfo(sechdrs, infoindex, "vermagic");
1888        /* This is allowed: modprobe --force will invalidate it. */
1889        if (!modmagic) {
1890                err = try_to_force_load(mod, "magic");
1891                if (err)
1892                        goto free_hdr;
1893        } else if (!same_magic(modmagic, vermagic, versindex)) {
1894                printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",
1895                       mod->name, modmagic, vermagic);
1896                err = -ENOEXEC;
1897                goto free_hdr;
1898        }
1899
1900        /* Now copy in args */
1901        args = strndup_user(uargs, ~0UL >> 1);
1902        if (IS_ERR(args)) {
1903                err = PTR_ERR(args);
1904                goto free_hdr;
1905        }
1906
1907        if (find_module(mod->name)) {
1908                err = -EEXIST;
1909                goto free_mod;
1910        }
1911
1912        mod->state = MODULE_STATE_COMING;
1913
1914        /* Allow arches to frob section contents and sizes.  */
1915        err = module_frob_arch_sections(hdr, sechdrs, secstrings, mod);
1916        if (err < 0)
1917                goto free_mod;
1918
1919        if (pcpuindex) {
1920                /* We have a special allocation for this section. */
1921                percpu = percpu_modalloc(sechdrs[pcpuindex].sh_size,
1922                                         sechdrs[pcpuindex].sh_addralign,
1923                                         mod->name);
1924                if (!percpu) {
1925                        err = -ENOMEM;
1926                        goto free_mod;
1927                }
1928                sechdrs[pcpuindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1929                mod->percpu = percpu;
1930        }
1931
1932        /* Determine total sizes, and put offsets in sh_entsize.  For now
1933           this is done generically; there doesn't appear to be any
1934           special cases for the architectures. */
1935        layout_sections(mod, hdr, sechdrs, secstrings);
1936
1937        /* Do the allocs. */
1938        ptr = module_alloc(mod->core_size);
1939        if (!ptr) {
1940                err = -ENOMEM;
1941                goto free_percpu;
1942        }
1943        memset(ptr, 0, mod->core_size);
1944        mod->module_core = ptr;
1945
1946        ptr = module_alloc(mod->init_size);
1947        if (!ptr && mod->init_size) {
1948                err = -ENOMEM;
1949                goto free_core;
1950        }
1951        memset(ptr, 0, mod->init_size);
1952        mod->module_init = ptr;
1953
1954        /* Transfer each section which specifies SHF_ALLOC */
1955        DEBUGP("final section addresses:\n");
1956        for (i = 0; i < hdr->e_shnum; i++) {
1957                void *dest;
1958
1959                if (!(sechdrs[i].sh_flags & SHF_ALLOC))
1960                        continue;
1961
1962                if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK)
1963                        dest = mod->module_init
1964                                + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK);
1965                else
1966                        dest = mod->module_core + sechdrs[i].sh_entsize;
1967
1968                if (sechdrs[i].sh_type != SHT_NOBITS)
1969                        memcpy(dest, (void *)sechdrs[i].sh_addr,
1970                               sechdrs[i].sh_size);
1971                /* Update sh_addr to point to copy in image. */
1972                sechdrs[i].sh_addr = (unsigned long)dest;
1973                DEBUGP("\t0x%lx %s\n", sechdrs[i].sh_addr, secstrings + sechdrs[i].sh_name);
1974        }
1975        /* Module has been moved. */
1976        mod = (void *)sechdrs[modindex].sh_addr;
1977
1978        /* Now we've moved module, initialize linked lists, etc. */
1979        module_unload_init(mod);
1980
1981        /* add kobject, so we can reference it. */
1982        err = mod_sysfs_init(mod);
1983        if (err)
1984                goto free_unload;
1985
1986        /* Set up license info based on the info section */
1987        set_license(mod, get_modinfo(sechdrs, infoindex, "license"));
1988
1989        /*
1990         * ndiswrapper is under GPL by itself, but loads proprietary modules.
1991         * Don't use add_taint_module(), as it would prevent ndiswrapper from
1992         * using GPL-only symbols it needs.
1993         */
1994        if (strcmp(mod->name, "ndiswrapper") == 0)
1995                add_taint(TAINT_PROPRIETARY_MODULE);
1996
1997        /* driverloader was caught wrongly pretending to be under GPL */
1998        if (strcmp(mod->name, "driverloader") == 0)
1999                add_taint_module(mod, TAINT_PROPRIETARY_MODULE);
2000
2001        /* Set up MODINFO_ATTR fields */
2002        setup_modinfo(mod, sechdrs, infoindex);
2003
2004        /* Fix up syms, so that st_value is a pointer to location. */
2005        err = simplify_symbols(sechdrs, symindex, strtab, versindex, pcpuindex,
2006                               mod);
2007        if (err < 0)
2008                goto cleanup;
2009
2010        /* Set up EXPORTed & EXPORT_GPLed symbols (section 0 is 0 length) */
2011        mod->num_syms = sechdrs[exportindex].sh_size / sizeof(*mod->syms);
2012        mod->syms = (void *)sechdrs[exportindex].sh_addr;
2013        if (crcindex)
2014                mod->crcs = (void *)sechdrs[crcindex].sh_addr;
2015        mod->num_gpl_syms = sechdrs[gplindex].sh_size / sizeof(*mod->gpl_syms);
2016        mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr;
2017        if (gplcrcindex)
2018                mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr;
2019        mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size /
2020                                        sizeof(*mod->gpl_future_syms);
2021        mod->num_unused_syms = sechdrs[unusedindex].sh_size /
2022                                        sizeof(*mod->unused_syms);
2023        mod->num_unused_gpl_syms = sechdrs[unusedgplindex].sh_size /
2024                                        sizeof(*mod->unused_gpl_syms);
2025        mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr;
2026        if (gplfuturecrcindex)
2027                mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr;
2028
2029        mod->unused_syms = (void *)sechdrs[unusedindex].sh_addr;
2030        if (unusedcrcindex)
2031                mod->unused_crcs = (void *)sechdrs[unusedcrcindex].sh_addr;
2032        mod->unused_gpl_syms = (void *)sechdrs[unusedgplindex].sh_addr;
2033        if (unusedgplcrcindex)
2034                mod->unused_gpl_crcs
2035                        = (void *)sechdrs[unusedgplcrcindex].sh_addr;
2036
2037#ifdef CONFIG_MODVERSIONS
2038        if ((mod->num_syms && !crcindex) ||
2039            (mod->num_gpl_syms && !gplcrcindex) ||
2040            (mod->num_gpl_future_syms && !gplfuturecrcindex) ||
2041            (mod->num_unused_syms && !unusedcrcindex) ||
2042            (mod->num_unused_gpl_syms && !unusedgplcrcindex)) {
2043                printk(KERN_WARNING "%s: No versions for exported symbols.\n", mod->name);
2044                err = try_to_force_load(mod, "nocrc");
2045                if (err)
2046                        goto cleanup;
2047        }
2048#endif
2049        markersindex = find_sec(hdr, sechdrs, secstrings, "__markers");
2050        markersstringsindex = find_sec(hdr, sechdrs, secstrings,
2051                                        "__markers_strings");
2052
2053        /* Now do relocations. */
2054        for (i = 1; i < hdr->e_shnum; i++) {
2055                const char *strtab = (char *)sechdrs[strindex].sh_addr;
2056                unsigned int info = sechdrs[i].sh_info;
2057
2058                /* Not a valid relocation section? */
2059                if (info >= hdr->e_shnum)
2060                        continue;
2061
2062                /* Don't bother with non-allocated sections */
2063                if (!(sechdrs[info].sh_flags & SHF_ALLOC))
2064                        continue;
2065
2066                if (sechdrs[i].sh_type == SHT_REL)
2067                        err = apply_relocate(sechdrs, strtab, symindex, i,mod);
2068                else if (sechdrs[i].sh_type == SHT_RELA)
2069                        err = apply_relocate_add(sechdrs, strtab, symindex, i,
2070                                                 mod);
2071                if (err < 0)
2072                        goto cleanup;
2073        }
2074#ifdef CONFIG_MARKERS
2075        mod->markers = (void *)sechdrs[markersindex].sh_addr;
2076        mod->num_markers =
2077                sechdrs[markersindex].sh_size / sizeof(*mod->markers);
2078#endif
2079
2080        /* Find duplicate symbols */
2081        err = verify_export_symbols(mod);
2082
2083        if (err < 0)
2084                goto cleanup;
2085
2086        /* Set up and sort exception table */
2087        mod->num_exentries = sechdrs[exindex].sh_size / sizeof(*mod->extable);
2088        mod->extable = extable = (void *)sechdrs[exindex].sh_addr;
2089        sort_extable(extable, extable + mod->num_exentries);
2090
2091        /* Finally, copy percpu area over. */
2092        percpu_modcopy(mod->percpu, (void *)sechdrs[pcpuindex].sh_addr,
2093                       sechdrs[pcpuindex].sh_size);
2094
2095        add_kallsyms(mod, sechdrs, symindex, strindex, secstrings);
2096
2097#ifdef CONFIG_MARKERS
2098        if (!mod->taints)
2099                marker_update_probe_range(mod->markers,
2100                        mod->markers + mod->num_markers);
2101#endif
2102        err = module_finalize(hdr, sechdrs, mod);
2103        if (err < 0)
2104                goto cleanup;
2105
2106        /* flush the icache in correct context */
2107        old_fs = get_fs();
2108        set_fs(KERNEL_DS);
2109
2110        /*
2111         * Flush the instruction cache, since we've played with text.
2112         * Do it before processing of module parameters, so the module
2113         * can provide parameter accessor functions of its own.
2114         */
2115        if (mod->module_init)
2116                flush_icache_range((unsigned long)mod->module_init,
2117                                   (unsigned long)mod->module_init
2118                                   + mod->init_size);
2119        flush_icache_range((unsigned long)mod->module_core,
2120                           (unsigned long)mod->module_core + mod->core_size);
2121
2122        set_fs(old_fs);
2123
2124        mod->args = args;
2125        if (obsparmindex)
2126                printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
2127                       mod->name);
2128
2129        /* Now sew it into the lists so we can get lockdep and oops
2130         * info during argument parsing.  Noone should access us, since
2131         * strong_try_module_get() will fail. */
2132        stop_machine_run(__link_module, mod, NR_CPUS);
2133
2134        /* Size of section 0 is 0, so this works well if no params */
2135        err = parse_args(mod->name, mod->args,
2136                         (struct kernel_param *)
2137                         sechdrs[setupindex].sh_addr,
2138                         sechdrs[setupindex].sh_size
2139                         / sizeof(struct kernel_param),
2140                         NULL);
2141        if (err < 0)
2142                goto unlink;
2143
2144        err = mod_sysfs_setup(mod,
2145                              (struct kernel_param *)
2146                              sechdrs[setupindex].sh_addr,
2147                              sechdrs[setupindex].sh_size
2148                              / sizeof(struct kernel_param));
2149        if (err < 0)
2150                goto unlink;
2151        add_sect_attrs(mod, hdr->e_shnum, secstrings, sechdrs);
2152        add_notes_attrs(mod, hdr->e_shnum, secstrings, sechdrs);
2153
2154        /* Size of section 0 is 0, so this works well if no unwind info. */
2155        mod->unwind_info = unwind_add_table(mod,
2156                                            (void *)sechdrs[unwindex].sh_addr,
2157                                            sechdrs[unwindex].sh_size);
2158
2159        /* Get rid of temporary copy */
2160        vfree(hdr);
2161
2162        /* Done! */
2163        return mod;
2164
2165 unlink:
2166        stop_machine_run(__unlink_module, mod, NR_CPUS);
2167        module_arch_cleanup(mod);
2168 cleanup:
2169        kobject_del(&mod->mkobj.kobj);
2170        kobject_put(&mod->mkobj.kobj);
2171 free_unload:
2172        module_unload_free(mod);
2173        module_free(mod, mod->module_init);
2174 free_core:
2175        module_free(mod, mod->module_core);
2176 free_percpu:
2177        if (percpu)
2178                percpu_modfree(percpu);
2179 free_mod:
2180        kfree(args);
2181 free_hdr:
2182        vfree(hdr);
2183        return ERR_PTR(err);
2184
2185 truncated:
2186        printk(KERN_ERR "Module len %lu truncated\n", len);
2187        err = -ENOEXEC;
2188        goto free_hdr;
2189}
2190
2191/* This is where the real work happens */
2192asmlinkage long
2193sys_init_module(void __user *umod,
2194                unsigned long len,
2195                const char __user *uargs)
2196{
2197        struct module *mod;
2198        int ret = 0;
2199
2200        /* Must have permission */
2201        if (!capable(CAP_SYS_MODULE))
2202                return -EPERM;
2203
2204        /* Only one module load at a time, please */
2205        if (mutex_lock_interruptible(&module_mutex) != 0)
2206                return -EINTR;
2207
2208        /* Do all the hard work */
2209        mod = load_module(umod, len, uargs);
2210        if (IS_ERR(mod)) {
2211                mutex_unlock(&module_mutex);
2212                return PTR_ERR(mod);
2213        }
2214
2215        /* Drop lock so they can recurse */
2216        mutex_unlock(&module_mutex);
2217
2218        blocking_notifier_call_chain(&module_notify_list,
2219                        MODULE_STATE_COMING, mod);
2220
2221        /* Start the module */
2222        if (mod->init != NULL)
2223                ret = mod->init();
2224        if (ret < 0) {
2225                /* Init routine failed: abort.  Try to protect us from
2226                   buggy refcounters. */
2227                mod->state = MODULE_STATE_GOING;
2228                synchronize_sched();
2229                module_put(mod);
2230                blocking_notifier_call_chain(&module_notify_list,
2231                                             MODULE_STATE_GOING, mod);
2232                mutex_lock(&module_mutex);
2233                free_module(mod);
2234                mutex_unlock(&module_mutex);
2235                wake_up(&module_wq);
2236                return ret;
2237        }
2238        if (ret > 0) {
2239                printk(KERN_WARNING "%s: '%s'->init suspiciously returned %d, "
2240                                    "it should follow 0/-E convention\n"
2241                       KERN_WARNING "%s: loading module anyway...\n",
2242                       __func__, mod->name, ret,
2243                       __func__);
2244                dump_stack();
2245        }
2246
2247        /* Now it's a first class citizen!  Wake up anyone waiting for it. */
2248        mod->state = MODULE_STATE_LIVE;
2249        wake_up(&module_wq);
2250
2251        mutex_lock(&module_mutex);
2252        /* Drop initial reference. */
2253        module_put(mod);
2254        unwind_remove_table(mod->unwind_info, 1);
2255        module_free(mod, mod->module_init);
2256        mod->module_init = NULL;
2257        mod->init_size = 0;
2258        mod->init_text_size = 0;
2259        mutex_unlock(&module_mutex);
2260
2261        return 0;
2262}
2263
2264static inline int within(unsigned long addr, void *start, unsigned long size)
2265{
2266        return ((void *)addr >= start && (void *)addr < start + size);
2267}
2268
2269#ifdef CONFIG_KALLSYMS
2270/*
2271 * This ignores the intensely annoying "mapping symbols" found
2272 * in ARM ELF files: $a, $t and $d.
2273 */
2274static inline int is_arm_mapping_symbol(const char *str)
2275{
2276        return str[0] == '$' && strchr("atd", str[1])
2277               && (str[2] == '\0' || str[2] == '.');
2278}
2279
2280static const char *get_ksymbol(struct module *mod,
2281                               unsigned long addr,
2282                               unsigned long *size,
2283                               unsigned long *offset)
2284{
2285        unsigned int i, best = 0;
2286        unsigned long nextval;
2287
2288        /* At worse, next value is at end of module */
2289        if (within(addr, mod->module_init, mod->init_size))
2290                nextval = (unsigned long)mod->module_init+mod->init_text_size;
2291        else
2292                nextval = (unsigned long)mod->module_core+mod->core_text_size;
2293
2294        /* Scan for closest preceeding symbol, and next symbol. (ELF
2295           starts real symbols at 1). */
2296        for (i = 1; i < mod->num_symtab; i++) {
2297                if (mod->symtab[i].st_shndx == SHN_UNDEF)
2298                        continue;
2299
2300                /* We ignore unnamed symbols: they're uninformative
2301                 * and inserted at a whim. */
2302                if (mod->symtab[i].st_value <= addr
2303                    && mod->symtab[i].st_value > mod->symtab[best].st_value
2304                    && *(mod->strtab + mod->symtab[i].st_name) != '\0'
2305                    && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
2306                        best = i;
2307                if (mod->symtab[i].st_value > addr
2308                    && mod->symtab[i].st_value < nextval
2309                    && *(mod->strtab + mod->symtab[i].st_name) != '\0'
2310                    && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
2311                        nextval = mod->symtab[i].st_value;
2312        }
2313
2314        if (!best)
2315                return NULL;
2316
2317        if (size)
2318                *size = nextval - mod->symtab[best].st_value;
2319        if (offset)
2320                *offset = addr - mod->symtab[best].st_value;
2321        return mod->strtab + mod->symtab[best].st_name;
2322}
2323
2324/* For kallsyms to ask for address resolution.  NULL means not found.  Careful
2325 * not to lock to avoid deadlock on oopses, simply disable preemption. */
2326const char *module_address_lookup(unsigned long addr,
2327                            unsigned long *size,
2328                            unsigned long *offset,
2329                            char **modname,
2330                            char *namebuf)
2331{
2332        struct module *mod;
2333        const char *ret = NULL;
2334
2335        preempt_disable();
2336        list_for_each_entry(mod, &modules, list) {
2337                if (within(addr, mod->module_init, mod->init_size)
2338                    || within(addr, mod->module_core, mod->core_size)) {
2339                        if (modname)
2340                                *modname = mod->name;
2341                        ret = get_ksymbol(mod, addr, size, offset);
2342                        break;
2343                }
2344        }
2345        /* Make a copy in here where it's safe */
2346        if (ret) {
2347                strncpy(namebuf, ret, KSYM_NAME_LEN - 1);
2348                ret = namebuf;
2349        }
2350        preempt_enable();
2351        return ret;
2352}
2353
2354int lookup_module_symbol_name(unsigned long addr, char *symname)
2355{
2356        struct module *mod;
2357
2358        preempt_disable();
2359        list_for_each_entry(mod, &modules, list) {
2360                if (within(addr, mod->module_init, mod->init_size) ||
2361                    within(addr, mod->module_core, mod->core_size)) {
2362                        const char *sym;
2363
2364                        sym = get_ksymbol(mod, addr, NULL, NULL);
2365                        if (!sym)
2366                                goto out;
2367                        strlcpy(symname, sym, KSYM_NAME_LEN);
2368                        preempt_enable();
2369                        return 0;
2370                }
2371        }
2372out:
2373        preempt_enable();
2374        return -ERANGE;
2375}
2376
2377int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size,
2378                        unsigned long *offset, char *modname, char *name)
2379{
2380        struct module *mod;
2381
2382        preempt_disable();
2383        list_for_each_entry(mod, &modules, list) {
2384                if (within(addr, mod->module_init, mod->init_size) ||
2385                    within(addr, mod->module_core, mod->core_size)) {
2386                        const char *sym;
2387
2388                        sym = get_ksymbol(mod, addr, size, offset);
2389                        if (!sym)
2390                                goto out;
2391                        if (modname)
2392                                strlcpy(modname, mod->name, MODULE_NAME_LEN);
2393                        if (name)
2394                                strlcpy(name, sym, KSYM_NAME_LEN);
2395                        preempt_enable();
2396                        return 0;
2397                }
2398        }
2399out:
2400        preempt_enable();
2401        return -ERANGE;
2402}
2403
2404int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
2405                        char *name, char *module_name, int *exported)
2406{
2407        struct module *mod;
2408
2409        preempt_disable();
2410        list_for_each_entry(mod, &modules, list) {
2411                if (symnum < mod->num_symtab) {
2412                        *value = mod->symtab[symnum].st_value;
2413                        *type = mod->symtab[symnum].st_info;
2414                        strlcpy(name, mod->strtab + mod->symtab[symnum].st_name,
2415                                KSYM_NAME_LEN);
2416                        strlcpy(module_name, mod->name, MODULE_NAME_LEN);
2417                        *exported = is_exported(name, mod);
2418                        preempt_enable();
2419                        return 0;
2420                }
2421                symnum -= mod->num_symtab;
2422        }
2423        preempt_enable();
2424        return -ERANGE;
2425}
2426
2427static unsigned long mod_find_symname(struct module *mod, const char *name)
2428{
2429        unsigned int i;
2430
2431        for (i = 0; i < mod->num_symtab; i++)
2432                if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 &&
2433                    mod->symtab[i].st_info != 'U')
2434                        return mod->symtab[i].st_value;
2435        return 0;
2436}
2437
2438/* Look for this name: can be of form module:name. */
2439unsigned long module_kallsyms_lookup_name(const char *name)
2440{
2441        struct module *mod;
2442        char *colon;
2443        unsigned long ret = 0;
2444
2445        /* Don't lock: we're in enough trouble already. */
2446        preempt_disable();
2447        if ((colon = strchr(name, ':')) != NULL) {
2448                *colon = '\0';
2449                if ((mod = find_module(name)) != NULL)
2450                        ret = mod_find_symname(mod, colon+1);
2451                *colon = ':';
2452        } else {
2453                list_for_each_entry(mod, &modules, list)
2454                        if ((ret = mod_find_symname(mod, name)) != 0)
2455                                break;
2456        }
2457        preempt_enable();
2458        return ret;
2459}
2460#endif /* CONFIG_KALLSYMS */
2461
2462/* Called by the /proc file system to return a list of modules. */
2463static void *m_start(struct seq_file *m, loff_t *pos)
2464{
2465        mutex_lock(&module_mutex);
2466        return seq_list_start(&modules, *pos);
2467}
2468
2469static void *m_next(struct seq_file *m, void *p, loff_t *pos)
2470{
2471        return seq_list_next(p, &modules, pos);
2472}
2473
2474static void m_stop(struct seq_file *m, void *p)
2475{
2476        mutex_unlock(&module_mutex);
2477}
2478
2479static char *module_flags(struct module *mod, char *buf)
2480{
2481        int bx = 0;
2482
2483        if (mod->taints ||
2484            mod->state == MODULE_STATE_GOING ||
2485            mod->state == MODULE_STATE_COMING) {
2486                buf[bx++] = '(';
2487                if (mod->taints & TAINT_PROPRIETARY_MODULE)
2488                        buf[bx++] = 'P';
2489                if (mod->taints & TAINT_FORCED_MODULE)
2490                        buf[bx++] = 'F';
2491                /*
2492                 * TAINT_FORCED_RMMOD: could be added.
2493                 * TAINT_UNSAFE_SMP, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
2494                 * apply to modules.
2495                 */
2496
2497                /* Show a - for module-is-being-unloaded */
2498                if (mod->state == MODULE_STATE_GOING)
2499                        buf[bx++] = '-';
2500                /* Show a + for module-is-being-loaded */
2501                if (mod->state == MODULE_STATE_COMING)
2502                        buf[bx++] = '+';
2503                buf[bx++] = ')';
2504        }
2505        buf[bx] = '\0';
2506
2507        return buf;
2508}
2509
2510static int m_show(struct seq_file *m, void *p)
2511{
2512        struct module *mod = list_entry(p, struct module, list);
2513        char buf[8];
2514
2515        seq_printf(m, "%s %lu",
2516                   mod->name, mod->init_size + mod->core_size);
2517        print_unload_info(m, mod);
2518
2519        /* Informative for users. */
2520        seq_printf(m, " %s",
2521                   mod->state == MODULE_STATE_GOING ? "Unloading":
2522                   mod->state == MODULE_STATE_COMING ? "Loading":
2523                   "Live");
2524        /* Used by oprofile and other similar tools. */
2525        seq_printf(m, " 0x%p", mod->module_core);
2526
2527        /* Taints info */
2528        if (mod->taints)
2529                seq_printf(m, " %s", module_flags(mod, buf));
2530
2531        seq_printf(m, "\n");
2532        return 0;
2533}
2534
2535/* Format: modulename size refcount deps address
2536
2537   Where refcount is a number or -, and deps is a comma-separated list
2538   of depends or -.
2539*/
2540const struct seq_operations modules_op = {
2541        .start  = m_start,
2542        .next   = m_next,
2543        .stop   = m_stop,
2544        .show   = m_show
2545};
2546
2547/* Given an address, look for it in the module exception tables. */
2548const struct exception_table_entry *search_module_extables(unsigned long addr)
2549{
2550        const struct exception_table_entry *e = NULL;
2551        struct module *mod;
2552
2553        preempt_disable();
2554        list_for_each_entry(mod, &modules, list) {
2555                if (mod->num_exentries == 0)
2556                        continue;
2557
2558                e = search_extable(mod->extable,
2559                                   mod->extable + mod->num_exentries - 1,
2560                                   addr);
2561                if (e)
2562                        break;
2563        }
2564        preempt_enable();
2565
2566        /* Now, if we found one, we are running inside it now, hence
2567           we cannot unload the module, hence no refcnt needed. */
2568        return e;
2569}
2570
2571/*
2572 * Is this a valid module address?
2573 */
2574int is_module_address(unsigned long addr)
2575{
2576        struct module *mod;
2577
2578        preempt_disable();
2579
2580        list_for_each_entry(mod, &modules, list) {
2581                if (within(addr, mod->module_core, mod->core_size)) {
2582                        preempt_enable();
2583                        return 1;
2584                }
2585        }
2586
2587        preempt_enable();
2588
2589        return 0;
2590}
2591
2592
2593/* Is this a valid kernel address? */
2594struct module *__module_text_address(unsigned long addr)
2595{
2596        struct module *mod;
2597
2598        list_for_each_entry(mod, &modules, list)
2599                if (within(addr, mod->module_init, mod->init_text_size)
2600                    || within(addr, mod->module_core, mod->core_text_size))
2601                        return mod;
2602        return NULL;
2603}
2604
2605struct module *module_text_address(unsigned long addr)
2606{
2607        struct module *mod;
2608
2609        preempt_disable();
2610        mod = __module_text_address(addr);
2611        preempt_enable();
2612
2613        return mod;
2614}
2615
2616/* Don't grab lock, we're oopsing. */
2617void print_modules(void)
2618{
2619        struct module *mod;
2620        char buf[8];
2621
2622        printk("Modules linked in:");
2623        list_for_each_entry(mod, &modules, list)
2624                printk(" %s%s", mod->name, module_flags(mod, buf));
2625        if (last_unloaded_module[0])
2626                printk(" [last unloaded: %s]", last_unloaded_module);
2627        printk("\n");
2628}
2629
2630#ifdef CONFIG_MODVERSIONS
2631/* Generate the signature for struct module here, too, for modversions. */
2632void struct_module(struct module *mod) { return; }
2633EXPORT_SYMBOL(struct_module);
2634#endif
2635
2636#ifdef CONFIG_MARKERS
2637void module_update_markers(void)
2638{
2639        struct module *mod;
2640
2641        mutex_lock(&module_mutex);
2642        list_for_each_entry(mod, &modules, list)
2643                if (!mod->taints)
2644                        marker_update_probe_range(mod->markers,
2645                                mod->markers + mod->num_markers);
2646        mutex_unlock(&module_mutex);
2647}
2648#endif
2649
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.