1. 13 3月, 2014 2 次提交
    • M
      Fix: module signature vs tracepoints: add new TAINT_UNSIGNED_MODULE · 66cc69e3
      Mathieu Desnoyers 提交于
      Users have reported being unable to trace non-signed modules loaded
      within a kernel supporting module signature.
      
      This is caused by tracepoint.c:tracepoint_module_coming() refusing to
      take into account tracepoints sitting within force-loaded modules
      (TAINT_FORCED_MODULE). The reason for this check, in the first place, is
      that a force-loaded module may have a struct module incompatible with
      the layout expected by the kernel, and can thus cause a kernel crash
      upon forced load of that module on a kernel with CONFIG_TRACEPOINTS=y.
      
      Tracepoints, however, specifically accept TAINT_OOT_MODULE and
      TAINT_CRAP, since those modules do not lead to the "very likely system
      crash" issue cited above for force-loaded modules.
      
      With kernels having CONFIG_MODULE_SIG=y (signed modules), a non-signed
      module is tainted re-using the TAINT_FORCED_MODULE taint flag.
      Unfortunately, this means that Tracepoints treat that module as a
      force-loaded module, and thus silently refuse to consider any tracepoint
      within this module.
      
      Since an unsigned module does not fit within the "very likely system
      crash" category of tainting, add a new TAINT_UNSIGNED_MODULE taint flag
      to specifically address this taint behavior, and accept those modules
      within Tracepoints. We use the letter 'X' as a taint flag character for
      a module being loaded that doesn't know how to sign its name (proposed
      by Steven Rostedt).
      
      Also add the missing 'O' entry to trace event show_module_flags() list
      for the sake of completeness.
      Signed-off-by: NMathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Acked-by: NSteven Rostedt <rostedt@goodmis.org>
      NAKed-by: NIngo Molnar <mingo@redhat.com>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: David Howells <dhowells@redhat.com>
      CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      66cc69e3
    • J
      module: use pr_cont · 27bba4d6
      Jiri Slaby 提交于
      When dumping loaded modules, we print them one by one in separate
      printks. Let's use pr_cont as they are continuation prints.
      Signed-off-by: NJiri Slaby <jslaby@suse.cz>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      27bba4d6
  2. 21 1月, 2014 1 次提交
  3. 13 11月, 2013 1 次提交
  4. 17 10月, 2013 1 次提交
  5. 23 9月, 2013 1 次提交
    • R
      module: remove rmmod --wait option. · 3f2b9c9c
      Rusty Russell 提交于
      The option to wait for a module reference count to reach zero was in
      the initial module implementation, but it was never supported in
      modprobe (you had to use rmmod --wait).  After discussion with Lucas,
      It has been deprecated (with a 10 second sleep) in kmod for the last
      year.
      
      This finally removes it: the flag will evoke a printk warning and a
      normal (non-blocking) remove attempt.
      
      Cc: Lucas De Marchi <lucas.de.marchi@gmail.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      3f2b9c9c
  6. 04 9月, 2013 1 次提交
  7. 03 9月, 2013 1 次提交
    • L
      module: Fix mod->mkobj.kobj potentially freed too early · 942e4431
      Li Zhong 提交于
      DEBUG_KOBJECT_RELEASE helps to find the issue attached below.
      
      After some investigation, it seems the reason is:
      The mod->mkobj.kobj(ffffffffa01600d0 below) is freed together with mod
      itself in free_module(). However, its children still hold references to
      it, as the delay caused by DEBUG_KOBJECT_RELEASE. So when the
      child(holders below) tries to decrease the reference count to its parent
      in kobject_del(), BUG happens as it tries to access already freed memory.
      
      This patch tries to fix it by waiting for the mod->mkobj.kobj to be
      really released in the module removing process (and some error code
      paths).
      
      [ 1844.175287] kobject: 'holders' (ffff88007c1f1600): kobject_release, parent ffffffffa01600d0 (delayed)
      [ 1844.178991] kobject: 'notes' (ffff8800370b2a00): kobject_release, parent ffffffffa01600d0 (delayed)
      [ 1845.180118] kobject: 'holders' (ffff88007c1f1600): kobject_cleanup, parent ffffffffa01600d0
      [ 1845.182130] kobject: 'holders' (ffff88007c1f1600): auto cleanup kobject_del
      [ 1845.184120] BUG: unable to handle kernel paging request at ffffffffa01601d0
      [ 1845.185026] IP: [<ffffffff812cda81>] kobject_put+0x11/0x60
      [ 1845.185026] PGD 1a13067 PUD 1a14063 PMD 7bd30067 PTE 0
      [ 1845.185026] Oops: 0000 [#1] PREEMPT
      [ 1845.185026] Modules linked in: xfs libcrc32c [last unloaded: kprobe_example]
      [ 1845.185026] CPU: 0 PID: 18 Comm: kworker/0:1 Tainted: G           O 3.11.0-rc6-next-20130819+ #1
      [ 1845.185026] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
      [ 1845.185026] Workqueue: events kobject_delayed_cleanup
      [ 1845.185026] task: ffff88007ca51f00 ti: ffff88007ca5c000 task.ti: ffff88007ca5c000
      [ 1845.185026] RIP: 0010:[<ffffffff812cda81>]  [<ffffffff812cda81>] kobject_put+0x11/0x60
      [ 1845.185026] RSP: 0018:ffff88007ca5dd08  EFLAGS: 00010282
      [ 1845.185026] RAX: 0000000000002000 RBX: ffffffffa01600d0 RCX: ffffffff8177d638
      [ 1845.185026] RDX: ffff88007ca5dc18 RSI: 0000000000000000 RDI: ffffffffa01600d0
      [ 1845.185026] RBP: ffff88007ca5dd18 R08: ffffffff824e9810 R09: ffffffffffffffff
      [ 1845.185026] R10: ffff8800ffffffff R11: dead4ead00000001 R12: ffffffff81a95040
      [ 1845.185026] R13: ffff88007b27a960 R14: ffff88007c1f1600 R15: 0000000000000000
      [ 1845.185026] FS:  0000000000000000(0000) GS:ffffffff81a23000(0000) knlGS:0000000000000000
      [ 1845.185026] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [ 1845.185026] CR2: ffffffffa01601d0 CR3: 0000000037207000 CR4: 00000000000006b0
      [ 1845.185026] Stack:
      [ 1845.185026]  ffff88007c1f1600 ffff88007c1f1600 ffff88007ca5dd38 ffffffff812cdb7e
      [ 1845.185026]  0000000000000000 ffff88007c1f1640 ffff88007ca5dd68 ffffffff812cdbfe
      [ 1845.185026]  ffff88007c974800 ffff88007c1f1640 ffff88007ff61a00 0000000000000000
      [ 1845.185026] Call Trace:
      [ 1845.185026]  [<ffffffff812cdb7e>] kobject_del+0x2e/0x40
      [ 1845.185026]  [<ffffffff812cdbfe>] kobject_delayed_cleanup+0x6e/0x1d0
      [ 1845.185026]  [<ffffffff81063a45>] process_one_work+0x1e5/0x670
      [ 1845.185026]  [<ffffffff810639e3>] ? process_one_work+0x183/0x670
      [ 1845.185026]  [<ffffffff810642b3>] worker_thread+0x113/0x370
      [ 1845.185026]  [<ffffffff810641a0>] ? rescuer_thread+0x290/0x290
      [ 1845.185026]  [<ffffffff8106bfba>] kthread+0xda/0xe0
      [ 1845.185026]  [<ffffffff814ff0f0>] ? _raw_spin_unlock_irq+0x30/0x60
      [ 1845.185026]  [<ffffffff8106bee0>] ? kthread_create_on_node+0x130/0x130
      [ 1845.185026]  [<ffffffff8150751a>] ret_from_fork+0x7a/0xb0
      [ 1845.185026]  [<ffffffff8106bee0>] ? kthread_create_on_node+0x130/0x130
      [ 1845.185026] Code: 81 48 c7 c7 28 95 ad 81 31 c0 e8 9b da 01 00 e9 4f ff ff ff 66 0f 1f 44 00 00 55 48 89 e5 53 48 89 fb 48 83 ec 08 48 85 ff 74 1d <f6> 87 00 01 00 00 01 74 1e 48 8d 7b 38 83 6b 38 01 0f 94 c0 84
      [ 1845.185026] RIP  [<ffffffff812cda81>] kobject_put+0x11/0x60
      [ 1845.185026]  RSP <ffff88007ca5dd08>
      [ 1845.185026] CR2: ffffffffa01601d0
      [ 1845.185026] ---[ end trace 49a70afd109f5653 ]---
      Signed-off-by: NLi Zhong <zhong@linux.vnet.ibm.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      942e4431
  8. 20 8月, 2013 2 次提交
  9. 03 7月, 2013 2 次提交
  10. 02 7月, 2013 2 次提交
  11. 17 5月, 2013 2 次提交
  12. 17 4月, 2013 1 次提交
    • R
      module: don't unlink the module until we've removed all exposure. · 944a1fa0
      Rusty Russell 提交于
      Otherwise we get a race between unload and reload of the same module:
      the new module doesn't see the old one in the list, but then fails because
      it can't register over the still-extant entries in sysfs:
      
       [  103.981925] ------------[ cut here ]------------
       [  103.986902] WARNING: at fs/sysfs/dir.c:536 sysfs_add_one+0xab/0xd0()
       [  103.993606] Hardware name: CrownBay Platform
       [  103.998075] sysfs: cannot create duplicate filename '/module/pch_gbe'
       [  104.004784] Modules linked in: pch_gbe(+) [last unloaded: pch_gbe]
       [  104.011362] Pid: 3021, comm: modprobe Tainted: G        W    3.9.0-rc5+ #5
       [  104.018662] Call Trace:
       [  104.021286]  [<c103599d>] warn_slowpath_common+0x6d/0xa0
       [  104.026933]  [<c1168c8b>] ? sysfs_add_one+0xab/0xd0
       [  104.031986]  [<c1168c8b>] ? sysfs_add_one+0xab/0xd0
       [  104.037000]  [<c1035a4e>] warn_slowpath_fmt+0x2e/0x30
       [  104.042188]  [<c1168c8b>] sysfs_add_one+0xab/0xd0
       [  104.046982]  [<c1168dbe>] create_dir+0x5e/0xa0
       [  104.051633]  [<c1168e78>] sysfs_create_dir+0x78/0xd0
       [  104.056774]  [<c1262bc3>] kobject_add_internal+0x83/0x1f0
       [  104.062351]  [<c126daf6>] ? kvasprintf+0x46/0x60
       [  104.067231]  [<c1262ebd>] kobject_add_varg+0x2d/0x50
       [  104.072450]  [<c1262f07>] kobject_init_and_add+0x27/0x30
       [  104.078075]  [<c1089240>] mod_sysfs_setup+0x80/0x540
       [  104.083207]  [<c1260851>] ? module_bug_finalize+0x51/0xc0
       [  104.088720]  [<c108ab29>] load_module+0x1429/0x18b0
      
      We can teardown sysfs first, then to be sure, put the state in
      MODULE_STATE_UNFORMED so it's ignored while we deconstruct it.
      Reported-by: NVeaceslav Falico <vfalico@redhat.com>
      Tested-by: NVeaceslav Falico <vfalico@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      944a1fa0
  13. 20 3月, 2013 1 次提交
    • J
      module: fix symbol versioning with symbol prefixes · a4b6a77b
      James Hogan 提交于
      Fix symbol versioning on architectures with symbol prefixes. Although
      the build was free from warnings the actual modules still wouldn't load
      as the ____versions table contained unprefixed symbol names, which were
      being compared against the prefixed symbol names when checking the
      symbol versions.
      
      This is fixed by modifying modpost to add the symbol prefix to the
      ____versions table it outputs (Modules.symvers still contains unprefixed
      symbol names). The check_modstruct_version() function is also fixed as
      it checks the version of the unprefixed "module_layout" symbol which
      would no longer work.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jonathan Kliegman <kliegs@chromium.org>
      Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (use VMLINUX_SYMBOL_STR)
      a4b6a77b
  14. 15 3月, 2013 1 次提交
    • R
      CONFIG_SYMBOL_PREFIX: cleanup. · b92021b0
      Rusty Russell 提交于
      We have CONFIG_SYMBOL_PREFIX, which three archs define to the string
      "_".  But Al Viro broke this in "consolidate cond_syscall and
      SYSCALL_ALIAS declarations" (in linux-next), and he's not the first to
      do so.
      
      Using CONFIG_SYMBOL_PREFIX is awkward, since we usually just want to
      prefix it so something.  So various places define helpers which are
      defined to nothing if CONFIG_SYMBOL_PREFIX isn't set:
      
      1) include/asm-generic/unistd.h defines __SYMBOL_PREFIX.
      2) include/asm-generic/vmlinux.lds.h defines VMLINUX_SYMBOL(sym)
      3) include/linux/export.h defines MODULE_SYMBOL_PREFIX.
      4) include/linux/kernel.h defines SYMBOL_PREFIX (which differs from #7)
      5) kernel/modsign_certificate.S defines ASM_SYMBOL(sym)
      6) scripts/modpost.c defines MODULE_SYMBOL_PREFIX
      7) scripts/Makefile.lib defines SYMBOL_PREFIX on the commandline if
         CONFIG_SYMBOL_PREFIX is set, so that we have a non-string version
         for pasting.
      
      (arch/h8300/include/asm/linkage.h defines SYMBOL_NAME(), too).
      
      Let's solve this properly:
      1) No more generic prefix, just CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX.
      2) Make linux/export.h usable from asm.
      3) Define VMLINUX_SYMBOL() and VMLINUX_SYMBOL_STR().
      4) Make everyone use them.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Reviewed-by: NJames Hogan <james.hogan@imgtec.com>
      Tested-by: James Hogan <james.hogan@imgtec.com> (metag)
      b92021b0
  15. 26 2月, 2013 1 次提交
  16. 21 1月, 2013 4 次提交
  17. 17 1月, 2013 1 次提交
    • T
      module, async: async_synchronize_full() on module init iff async is used · 774a1221
      Tejun Heo 提交于
      If the default iosched is built as module, the kernel may deadlock
      while trying to load the iosched module on device probe if the probing
      was running off async.  This is because async_synchronize_full() at
      the end of module init ends up waiting for the async job which
      initiated the module loading.
      
       async A				modprobe
      
       1. finds a device
       2. registers the block device
       3. request_module(default iosched)
      					4. modprobe in userland
      					5. load and init module
      					6. async_synchronize_full()
      
      Async A waits for modprobe to finish in request_module() and modprobe
      waits for async A to finish in async_synchronize_full().
      
      Because there's no easy to track dependency once control goes out to
      userland, implementing properly nested flushing is difficult.  For
      now, make module init perform async_synchronize_full() iff module init
      has queued async jobs as suggested by Linus.
      
      This avoids the described deadlock because iosched module doesn't use
      async and thus wouldn't invoke async_synchronize_full().  This is
      hacky and incomplete.  It will deadlock if async module loading nests;
      however, this works around the known problem case and seems to be the
      best of bad options.
      
      For more details, please refer to the following thread.
      
        http://thread.gmane.org/gmane.linux.kernel/1420814Signed-off-by: NTejun Heo <tj@kernel.org>
      Reported-by: NAlex Riesen <raa.lkml@gmail.com>
      Tested-by: NMing Lei <ming.lei@canonical.com>
      Tested-by: NAlex Riesen <raa.lkml@gmail.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      774a1221
  18. 12 1月, 2013 2 次提交
    • R
      module: put modules in list much earlier. · 1fb9341a
      Rusty Russell 提交于
      Prarit's excellent bug report:
      > In recent Fedora releases (F17 & F18) some users have reported seeing
      > messages similar to
      >
      > [   15.478160] kvm: Could not allocate 304 bytes percpu data
      > [   15.478174] PERCPU: allocation failed, size=304 align=32, alloc from
      > reserved chunk failed
      >
      > during system boot.  In some cases, users have also reported seeing this
      > message along with a failed load of other modules.
      >
      > What is happening is systemd is loading an instance of the kvm module for
      > each cpu found (see commit e9bda3b3).  When the module load occurs the kernel
      > currently allocates the modules percpu data area prior to checking to see
      > if the module is already loaded or is in the process of being loaded.  If
      > the module is already loaded, or finishes load, the module loading code
      > releases the current instance's module's percpu data.
      
      Now we have a new state MODULE_STATE_UNFORMED, we can insert the
      module into the list (and thus guarantee its uniqueness) before we
      allocate the per-cpu region.
      Reported-by: NPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Tested-by: NPrarit Bhargava <prarit@redhat.com>
      1fb9341a
    • R
      module: add new state MODULE_STATE_UNFORMED. · 0d21b0e3
      Rusty Russell 提交于
      You should never look at such a module, so it's excised from all paths
      which traverse the modules list.
      
      We add the state at the end, to avoid gratuitous ABI break (ksplice).
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      0d21b0e3
  19. 03 1月, 2013 1 次提交
  20. 18 12月, 2012 1 次提交
  21. 14 12月, 2012 5 次提交
    • R
      modules: don't hand 0 to vmalloc. · 82fab442
      Rusty Russell 提交于
      In commit d0a21265 David Rientjes unified various archs'
      module_alloc implementation (including x86) and removed the graduitous
      shortcut for size == 0.
      
      Then, in commit de7d2b56, Joe Perches added a warning for
      zero-length vmallocs, which can happen without kallsyms on modules
      with no init sections (eg. zlib_deflate).
      
      Fix this once and for all; the module code has to handle zero length
      anyway, so get it right at the caller and remove the now-gratuitous
      checks within the arch-specific module_alloc implementations.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42608Reported-by: NConrad Kostecki <ConiKost@gmx.de>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joe Perches <joe@perches.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      82fab442
    • S
      module: Remove a extra null character at the top of module->strtab. · 54523ec7
      Satoru Takeuchi 提交于
      There is a extra null character('\0') at the top of module->strtab for
      each module. Commit 59ef28b1 introduced this bug and this patch fixes it.
      
      Live dump log of the current linus git kernel(HEAD is 2844a487):
      ============================================================================
      crash> mod | grep loop
      ffffffffa01db0a0  loop             16689  (not loaded)  [CONFIG_KALLSYMS]
      crash> module.core_symtab ffffffffa01db0a0
        core_symtab = 0xffffffffa01db320crash> rd 0xffffffffa01db320 12
      ffffffffa01db320:  0000005500000001 0000000000000000   ....U...........
      ffffffffa01db330:  0000000000000000 0002007400000002   ............t...
      ffffffffa01db340:  ffffffffa01d8000 0000000000000038   ........8.......
      ffffffffa01db350:  001a00640000000e ffffffffa01daeb0   ....d...........
      ffffffffa01db360:  00000000000000a0 0002007400000019   ............t...
      ffffffffa01db370:  ffffffffa01d8068 000000000000001b   h...............
      crash> module.core_strtab ffffffffa01db0a0
        core_strtab = 0xffffffffa01dbb30 ""
      crash> rd 0xffffffffa01dbb30 4
      ffffffffa01dbb30:  615f70616d6b0000 66780063696d6f74   ..kmap_atomic.xf
      ffffffffa01dbb40:  73636e75665f7265 72665f646e696600   er_funcs.find_fr
      ============================================================================
      
      We expect Just first one byte of '\0', but actually first two bytes
      are '\0'. Here is The relationship between symtab and strtab.
      
      	symtab_idx	strtab_idx	symbol
      	-----------------------------------------------
      	0		0x1		"\0" # startab_idx should be 0
      	1		0x2		"kmap_atomic"
      	2		0xe		"xfer_funcs"
      	3		0x19		"find_fr..."
      
      By applying this patch, it becomes as follows.
      
      	symtab_idx	strtab_idx	symbol
      	-----------------------------------------------
      	0		0x0		"\0"	# extra byte is removed
      	1		0x1		"kmap_atomic"
      	2		0xd		"xfer_funcs"
      	3		0x18		"find_fr..."
      Signed-off-by: NSatoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
      Cc: Masaki Kimura <masaki.kimura.kz@hitachi.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      54523ec7
    • K
      security: introduce kernel_module_from_file hook · 2e72d51b
      Kees Cook 提交于
      Now that kernel module origins can be reasoned about, provide a hook to
      the LSMs to make policy decisions about the module file. This will let
      Chrome OS enforce that loadable kernel modules can only come from its
      read-only hash-verified root filesystem. Other LSMs can, for example,
      read extended attributes for signatures, etc.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Acked-by: NSerge E. Hallyn <serge.hallyn@canonical.com>
      Acked-by: NEric Paris <eparis@redhat.com>
      Acked-by: NMimi Zohar <zohar@us.ibm.com>
      Acked-by: NJames Morris <james.l.morris@oracle.com>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      2e72d51b
    • R
      module: add flags arg to sys_finit_module() · 2f3238ae
      Rusty Russell 提交于
      Thanks to Michael Kerrisk for keeping us honest.  These flags are actually
      useful for eliminating the only case where kmod has to mangle a module's
      internals: for overriding module versioning.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Acked-by: NLucas De Marchi <lucas.demarchi@profusion.mobi>
      Acked-by: NKees Cook <keescook@chromium.org>
      2f3238ae
    • K
      module: add syscall to load module from fd · 34e1169d
      Kees Cook 提交于
      As part of the effort to create a stronger boundary between root and
      kernel, Chrome OS wants to be able to enforce that kernel modules are
      being loaded only from our read-only crypto-hash verified (dm_verity)
      root filesystem. Since the init_module syscall hands the kernel a module
      as a memory blob, no reasoning about the origin of the blob can be made.
      
      Earlier proposals for appending signatures to kernel modules would not be
      useful in Chrome OS, since it would involve adding an additional set of
      keys to our kernel and builds for no good reason: we already trust the
      contents of our root filesystem. We don't need to verify those kernel
      modules a second time. Having to do signature checking on module loading
      would slow us down and be redundant. All we need to know is where a
      module is coming from so we can say yes/no to loading it.
      
      If a file descriptor is used as the source of a kernel module, many more
      things can be reasoned about. In Chrome OS's case, we could enforce that
      the module lives on the filesystem we expect it to live on.  In the case
      of IMA (or other LSMs), it would be possible, for example, to examine
      extended attributes that may contain signatures over the contents of
      the module.
      
      This introduces a new syscall (on x86), similar to init_module, that has
      only two arguments. The first argument is used as a file descriptor to
      the module and the second argument is a pointer to the NULL terminated
      string of module arguments.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (merge fixes)
      34e1169d
  22. 31 10月, 2012 1 次提交
    • R
      module: fix out-by-one error in kallsyms · 59ef28b1
      Rusty Russell 提交于
      Masaki found and patched a kallsyms issue: the last symbol in a
      module's symtab wasn't transferred.  This is because we manually copy
      the zero'th entry (which is always empty) then copy the rest in a loop
      starting at 1, though from src[0].  His fix was minimal, I prefer to
      rewrite the loops in more standard form.
      
      There are two loops: one to get the size, and one to copy.  Make these
      identical: always count entry 0 and any defined symbol in an allocated
      non-init section.
      
      This bug exists since the following commit was introduced.
         module: reduce symbol table for loaded modules (v2)
         commit: 4a496226
      
      LKML: http://lkml.org/lkml/2012/10/24/27Reported-by: NMasaki Kimura <masaki.kimura.kz@hitachi.com>
      Cc: stable@kernel.org
      59ef28b1
  23. 20 10月, 2012 1 次提交
    • D
      MODSIGN: Move the magic string to the end of a module and eliminate the search · caabe240
      David Howells 提交于
      Emit the magic string that indicates a module has a signature after the
      signature data instead of before it.  This allows module_sig_check() to
      be made simpler and faster by the elimination of the search for the
      magic string.  Instead we just need to do a single memcmp().
      
      This works because at the end of the signature data there is the
      fixed-length signature information block.  This block then falls
      immediately prior to the magic number.
      
      From the contents of the information block, it is trivial to calculate
      the size of the signature data and thus the size of the actual module
      data.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      caabe240
  24. 10 10月, 2012 2 次提交
  25. 28 9月, 2012 2 次提交
    • R
      module: wait when loading a module which is currently initializing. · 9bb9c3be
      Rusty Russell 提交于
      The original module-init-tools module loader used a fnctl lock on the
      .ko file to avoid attempts to simultaneously load a module.
      Unfortunately, you can't get an exclusive fcntl lock on a read-only
      fd, making this not work for read-only mounted filesystems.
      module-init-tools has a hacky sleep-and-loop for this now.
      
      It's not that hard to wait in the kernel, and only return -EEXIST once
      the first module has finished loading (or continue loading the module
      if the first one failed to initialize for some reason).  It's also
      consistent with what we do for dependent modules which are still loading.
      Suggested-by: NLucas De Marchi <lucas.demarchi@profusion.mobi>
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      9bb9c3be
    • R
      module: fix symbol waiting when module fails before init · 6f13909f
      Rusty Russell 提交于
      We use resolve_symbol_wait(), which blocks if the module containing
      the symbol is still loading.  However:
      
      1) The module_wq we use is only woken after calling the modules' init
         function, but there are other failure paths after the module is
         placed in the linked list where we need to do the same thing.
      
      2) wake_up() only wakes one waiter, and our waitqueue is shared by all
         modules, so we need to wake them all.
      
      3) wake_up_all() doesn't imply a memory barrier: I feel happier calling
         it after we've grabbed and dropped the module_mutex, not just after
         the state assignment.
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      6f13909f