03 Dec, 2009

1 commit

  • On the parisc architecture we face for each and every loaded kernel module
    this kernel "badness warning":
    sysfs: cannot create duplicate filename '/module/ac97_bus/sections/.text'
    Badness at fs/sysfs/dir.c:487

    Reason for that is, that on parisc all kernel modules do have multiple
    .text sections due to the usage of the -ffunction-sections compiler flag
    which is needed to reach all jump targets on this platform.

    An objdump on such a kernel module gives:
    Sections:
    Idx Name Size VMA LMA File off Algn
    0 .note.gnu.build-id 00000024 00000000 00000000 00000034 2**2
    CONTENTS, ALLOC, LOAD, READONLY, DATA
    1 .text 00000000 00000000 00000000 00000058 2**0
    CONTENTS, ALLOC, LOAD, READONLY, CODE
    2 .text.ac97_bus_match 0000001c 00000000 00000000 00000058 2**2
    CONTENTS, ALLOC, LOAD, READONLY, CODE
    3 .text 00000000 00000000 00000000 000000d4 2**0
    CONTENTS, ALLOC, LOAD, READONLY, CODE
    ...
    Since the .text sections are empty (size of 0 bytes) and won't be
    loaded by the kernel module loader anyway, I don't see a reason
    why such sections need to be listed under
    /sys/module//sections/ either.

    The attached patch does solve this issue by not exporting section
    names which are empty.

    This fixes bugzilla http://bugzilla.kernel.org/show_bug.cgi?id=14703

    Signed-off-by: Helge Deller
    CC: rusty@rustcorp.com.au
    CC: akpm@linux-foundation.org
    CC: James.Bottomley@HansenPartnership.com
    CC: roland@redhat.com
    CC: dave@hiauly1.hia.nrc.ca
    Signed-off-by: Linus Torvalds

    Helge Deller
     

02 Oct, 2009

1 commit

  • Starting from commit 4a4962263f07d14660849ec134ee42b63e95ea9a "reduce
    symbol table for loaded modules (v2)", the kernel/module.c build is broken
    with CONFIG_KALLSYMS disabled.

    CC kernel/module.o
    kernel/module.c:1995: warning: type defaults to 'int' in declaration of 'Elf_Hdr'
    kernel/module.c:1995: error: expected ';', ',' or ')' before '*' token
    kernel/module.c: In function 'load_module':
    kernel/module.c:2203: error: 'strmap' undeclared (first use in this function)
    kernel/module.c:2203: error: (Each undeclared identifier is reported only once
    kernel/module.c:2203: error: for each function it appears in.)
    kernel/module.c:2239: error: 'symoffs' undeclared (first use in this function)
    kernel/module.c:2239: error: implicit declaration of function 'layout_symtab'
    kernel/module.c:2240: error: 'stroffs' undeclared (first use in this function)
    make[1]: *** [kernel/module.o] Error 1
    make: *** [kernel/module.o] Error 2

    There are three different issues:

    - layout_symtab() takes a const Elf_Ehdr

    - layout_symtab() needs to return a value

    - symoffs/stroffs/strmap are referenced by the load_module() code
    despite being ifdefed out, which seems unnecessary given the noop
    behaviour of layout_symtab()/add_kallsyms() in the case of
    CONFIG_KALLSYMS=n.

    Signed-off-by: Paul Mundt
    Acked-by: Jan Beulich
    Acked-by: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul Mundt
     

27 Sep, 2009

1 commit

  • …nel/git/tip/linux-2.6-tip

    * 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    modules, tracing: Remove stale struct marker signature from module_layout()
    tracing/workqueue: Use %pf in workqueue trace events
    tracing: Fix a comment and a trivial format issue in tracepoint.h
    tracing: Fix failure path in ftrace_regex_open()
    tracing: Fix failure path in ftrace_graph_write()
    tracing: Check the return value of trace_get_user()
    tracing: Fix off-by-one in trace_get_user()

    Linus Torvalds
     

24 Sep, 2009

4 commits

  • The general one handles NULL, the static obsolescent
    (CONFIG_HAVE_LEGACY_PER_CPU_AREA) one in module.c doesn't; Eric's
    commit 720eba31 assumed it did, and various frobbings since then kept
    that assumption.

    All other callers in module.c all protect it with an if; this effectively
    does the same as free_init is only goto if we fail percpu_modalloc().

    Reported-by: Kamalesh Babulal
    Signed-off-by: Rusty Russell
    Cc: Eric Dumazet
    Cc: Masami Hiramatsu
    Cc: Américo Wang
    Tested-by: Kamalesh Babulal

    Rusty Russell
     
  • Normally the twisty paths of sysfs will free the attributes, but not if
    we fail before we hook it into sysfs (which is the last thing we do in
    load_module).

    (This sysfs code is a turd, no doubt there are other issues lurking too).

    Reported-by: Tetsuo Handa
    Signed-off-by: Rusty Russell
    Cc: Catalin Marinas
    Tested-by: Tetsuo Handa

    Rusty Russell
     
  • Also remove all parts of the string table (referenced by the symbol
    table) that are not needed for kallsyms use (i.e. which were only
    referenced by symbols discarded by the previous patch, or not
    referenced at all for whatever reason).

    Signed-off-by: Jan Beulich
    Signed-off-by: Rusty Russell

    Jan Beulich
     
  • Discard all symbols not interesting for kallsyms use: absolute,
    section, and in the common case (!KALLSYMS_ALL) data ones.

    Signed-off-by: Jan Beulich
    Signed-off-by: Rusty Russell

    Jan Beulich
     

23 Sep, 2009

1 commit

  • Linus reported this new build warning:

    kernel/module.c:2951: warning: ?struct marker? declared inside parameter list
    kernel/module.c:2951: warning: its scope is only this definition or declaration, which is probably not what you want

    Caused by:

    fc53776: tracing: Remove markers

    module_layout() is an artificial symbol with 'significant' symbols
    listed in its argument list so that it gets a proper argument types
    signature that modversions can pick up to decide whether a
    module is version-compatible or not. If these dont match then we
    wont even look at a module.

    Remove the stale marker symbol.

    Reported-by: Linus Torvalds
    LKML-Reference:
    Cc: Christoph Hellwig
    Cc: Mathieu Desnoyers
    Cc: Steven Rostedt
    Cc: Frederic Weisbecker
    Cc: Rusty Russell
    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

22 Sep, 2009

1 commit

  • Some architectures (like the Blackfin arch) implement some of the
    "simpler" features that one would expect out of a MMU such as memory
    protection.

    In our case, we actually get read/write/exec protection down to the page
    boundary so processes can't stomp on each other let alone the kernel.

    There is a performance decrease (which depends greatly on the workload)
    however as the hardware/software interaction was not optimized at design
    time.

    Signed-off-by: Bernd Schmidt
    Signed-off-by: Bryan Wu
    Signed-off-by: Mike Frysinger
    Acked-by: David Howells
    Acked-by: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bernd Schmidt
     

19 Sep, 2009

1 commit

  • Now that the last users of markers have migrated to the event
    tracer we can kill off the (now orphan) support code.

    Signed-off-by: Christoph Hellwig
    Acked-by: Mathieu Desnoyers
    Cc: Steven Rostedt
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Christoph Hellwig
     

16 Sep, 2009

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu: (46 commits)
    powerpc64: convert to dynamic percpu allocator
    sparc64: use embedding percpu first chunk allocator
    percpu: kill lpage first chunk allocator
    x86,percpu: use embedding for 64bit NUMA and page for 32bit NUMA
    percpu: update embedding first chunk allocator to handle sparse units
    percpu: use group information to allocate vmap areas sparsely
    vmalloc: implement pcpu_get_vm_areas()
    vmalloc: separate out insert_vmalloc_vm()
    percpu: add chunk->base_addr
    percpu: add pcpu_unit_offsets[]
    percpu: introduce pcpu_alloc_info and pcpu_group_info
    percpu: move pcpu_lpage_build_unit_map() and pcpul_lpage_dump_cfg() upward
    percpu: add @align to pcpu_fc_alloc_fn_t
    percpu: make @dyn_size mandatory for pcpu_setup_first_chunk()
    percpu: drop @static_size from first chunk allocators
    percpu: generalize first chunk allocator selection
    percpu: build first chunk allocators selectively
    percpu: rename 4k first chunk allocator to page
    percpu: improve boot messages
    percpu: fix pcpu_reclaim() locking
    ...

    Fix trivial conflict as by Tejun Heo in kernel/sched.c

    Linus Torvalds
     

06 Sep, 2009

1 commit


29 Aug, 2009

1 commit

  • > James Bottomley (1):
    > module: workaround duplicate section names

    -tip testing found that this patch breaks the build on x86 if
    CONFIG_KALLSYMS is disabled:

    kernel/module.c: In function ‘load_module’:
    kernel/module.c:2367: error: ‘struct module’ has no member named ‘sect_attrs’
    distcc[8269] ERROR: compile kernel/module.c on ph/32 failed
    make[1]: *** [kernel/module.o] Error 1
    make: *** [kernel] Error 2
    make: *** Waiting for unfinished jobs....

    Commit 1b364bf misses the fact that section attributes are only
    built and dealt with if kallsyms is enabled. The patch below fixes
    this.

    ( note, technically speaking this should depend on CONFIG_SYSFS as
    well but this patch is correct too and keeps the #ifdef less
    intrusive - in the KALLSYMS && !SYSFS case the code is a NOP. )

    Signed-off-by: Ingo Molnar
    [ Replaced patch with a slightly cleaner variation by James Bottomley ]
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     

28 Aug, 2009

2 commits

  • The root cause is a duplicate section name (.text); is this legal?
    [ Amerigo Wang: "AFAIK, yes." ]

    However, there's a problem with commit
    6d76013381ed28979cd122eb4b249a88b5e384fa in that if you fail to allocate
    a mod->sect_attrs (in this case it's null because of the duplication),
    it still gets used without checking in add_notes_attrs()

    This should fix it

    [ This patch leaves other problems, particularly the sections directory,
    but recent parisc toolchains seem to produce these modules and this
    prevents a crash and is a minimal change -- RR ]

    Signed-off-by: James Bottomley
    Signed-off-by: Rusty Russell
    Tested-by: Helge Deller
    Signed-off-by: Linus Torvalds

    James Bottomley
     
  • The rarely-used symbol_put_addr() needs to use dereference_function_descriptor
    on powerpc.

    Reported-by: Paul Mackerras
    Signed-off-by: Rusty Russell

    Rusty Russell
     

17 Aug, 2009

1 commit

  • Add trace points to trace module_load, module_free, module_get,
    module_put and module_request, and use trace_event facility to
    get the trace output.

    Here's the sample output:

    TASK-PID CPU# TIMESTAMP FUNCTION
    | | | | |
    -42 [000] 1.758380: module_request: fb0 wait=1 call_site=fb_open
    ...
    -60 [000] 3.269403: module_load: scsi_wait_scan
    -60 [000] 3.269432: module_put: scsi_wait_scan call_site=sys_init_module refcnt=0
    -61 [001] 3.273168: module_free: scsi_wait_scan
    ...
    -1021 [000] 13.836081: module_load: sunrpc
    -1021 [000] 13.840589: module_put: sunrpc call_site=sys_init_module refcnt=-1
    -1027 [000] 13.848098: module_get: sunrpc call_site=try_module_get refcnt=0
    -1027 [000] 13.848308: module_get: sunrpc call_site=get_filesystem refcnt=1
    -1027 [000] 13.848692: module_put: sunrpc call_site=put_filesystem refcnt=0
    ...
    modprobe-2587 [001] 1088.437213: module_load: trace_events_sample F
    modprobe-2587 [001] 1088.437786: module_put: trace_events_sample call_site=sys_init_module refcnt=0

    Note:

    - the taints flag can be 'F', 'C' and/or 'P' if mod->taints != 0

    - the module refcnt is percpu, so it can be negative in a
    specific cpu

    Signed-off-by: Li Zefan
    Acked-by: Rusty Russell
    Cc: Steven Rostedt
    Cc: Frederic Weisbecker
    Cc: Rusty Russell
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Li Zefan
     

14 Aug, 2009

1 commit

  • Conflicts:
    arch/sparc/kernel/smp_64.c
    arch/x86/kernel/cpu/perf_counter.c
    arch/x86/kernel/setup_percpu.c
    drivers/cpufreq/cpufreq_ondemand.c
    mm/percpu.c

    Conflicts in core and arch percpu codes are mostly from commit
    ed78e1e078dd44249f88b1dd8c76dafb39567161 which substituted many
    num_possible_cpus() with nr_cpu_ids. As for-next branch has moved all
    the first chunk allocators into mm/percpu.c, the changes are moved
    from arch code to mm/percpu.c.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

28 Jul, 2009

1 commit

  • The check_modstruct_version() needs to look up the symbol "module_layout"
    in the kernel, but it does so literally and not by a C identifier. The
    trouble is that it does not include a symbol prefix for those ports that
    need it (like the Blackfin and H8300 port). So make sure we tack on the
    MODULE_SYMBOL_PREFIX define to the front of it.

    Signed-off-by: Mike Frysinger
    Signed-off-by: Rusty Russell
    Signed-off-by: Linus Torvalds

    Mike Frysinger
     

09 Jul, 2009

1 commit

  • Commit 5fd29d6ccbc98884569d6f3105aeca70858b3e0f ("printk: clean up
    handling of log-levels and newlines") changed printk semantics. printk
    lines with multiple KERN_ prefixes are no longer emitted as
    before the patch.

    is now included in the output on each additional use.

    Remove all uses of multiple KERN_s in formats.

    Signed-off-by: Joe Perches
    Signed-off-by: Linus Torvalds

    Joe Perches
     

24 Jun, 2009

1 commit

  • This patch makes most !CONFIG_HAVE_SETUP_PER_CPU_AREA archs use
    dynamic percpu allocator. The first chunk is allocated using
    embedding helper and 8k is reserved for modules. This ensures that
    the new allocator behaves almost identically to the original allocator
    as long as static percpu variables are concerned, so it shouldn't
    introduce much breakage.

    s390 and alpha use custom SHIFT_PERCPU_PTR() to work around addressing
    range limit the addressing model imposes. Unfortunately, this breaks
    if the address is specified using a variable, so for now, the two
    archs aren't converted.

    The following architectures are affected by this change.

    * sh
    * arm
    * cris
    * mips
    * sparc(32)
    * blackfin
    * avr32
    * parisc (broken, under investigation)
    * m32r
    * powerpc(32)

    As this change makes the dynamic allocator the default one,
    CONFIG_HAVE_DYNAMIC_PER_CPU_AREA is replaced with its invert -
    CONFIG_HAVE_LEGACY_PER_CPU_AREA, which is added to yet-to-be converted
    archs. These archs implement their own setup_per_cpu_areas() and the
    conversion is not trivial.

    * powerpc(64)
    * sparc(64)
    * ia64
    * alpha
    * s390

    Boot and batch alloc/free tests on x86_32 with debug code (x86_32
    doesn't use default first chunk initialization). Compile tested on
    sparc(32), powerpc(32), arm and alpha.

    Kyle McMartin reported that this change breaks parisc. The problem is
    still under investigation and he is okay with pushing this patch
    forward and fixing parisc later.

    [ Impact: use dynamic allocator for most archs w/o custom percpu setup ]

    Signed-off-by: Tejun Heo
    Acked-by: Rusty Russell
    Acked-by: David S. Miller
    Acked-by: Benjamin Herrenschmidt
    Acked-by: Martin Schwidefsky
    Reviewed-by: Christoph Lameter
    Cc: Paul Mundt
    Cc: Russell King
    Cc: Mikael Starvik
    Cc: Ralf Baechle
    Cc: Bryan Wu
    Cc: Kyle McMartin
    Cc: Matthew Wilcox
    Cc: Grant Grundler
    Cc: Hirokazu Takata
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Cc: Heiko Carstens
    Cc: Ingo Molnar

    Tejun Heo
     

19 Jun, 2009

1 commit

  • Call constructors (gcc-generated initcall-like functions) during kernel
    start and module load. Constructors are e.g. used for gcov data
    initialization.

    Disable constructor support for usermode Linux to prevent conflicts with
    host glibc.

    Signed-off-by: Peter Oberparleiter
    Acked-by: Rusty Russell
    Acked-by: WANG Cong
    Cc: Sam Ravnborg
    Cc: Jeff Dike
    Cc: Andi Kleen
    Cc: Huang Ying
    Cc: Li Wei
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Oberparleiter
     

17 Jun, 2009

1 commit

  • Several WARN_ON() messages omit the '\n' at the end of the string, which
    is a simple (and understandable) error. The next line printed after
    that warning line is usually the current module list, and that printk
    does not have a log-level marker - resulting in one long mixed-up line.

    Adding this loglevel marker will now avoid this unreadable mess.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

12 Jun, 2009

4 commits

  • It's theoretically possible that there are exception table entries
    which point into the (freed) init text of modules. These could cause
    future problems if other modules get loaded into that memory and cause
    an exception as we'd see the wrong fixup. The only case I know of is
    kvm-intel.ko (when CONFIG_CC_OPTIMIZE_FOR_SIZE=n).

    Amerigo fixed this long-standing FIXME in the x86 version, but this
    patch is more general.

    This implements trim_init_extable(); most archs are simple since they
    use the standard lib/extable.c sort code. Alpha and IA64 use relative
    addresses in their fixups, so thier trimming is a slight variation.

    Sparc32 is unique; it doesn't seem to define ARCH_HAS_SORT_EXTABLE,
    yet it defines its own sort_extable() which overrides the one in lib.
    It doesn't sort, so we have to mark deleted entries instead of
    actually trimming them.

    Inspired-by: Amerigo Wang
    Signed-off-by: Rusty Russell
    Cc: linux-alpha@vger.kernel.org
    Cc: sparclinux@vger.kernel.org
    Cc: linux-ia64@vger.kernel.org

    Rusty Russell
     
  • * 'for-linus' of git://linux-arm.org/linux-2.6:
    kmemleak: Add the corresponding MAINTAINERS entry
    kmemleak: Simple testing module for kmemleak
    kmemleak: Enable the building of the memory leak detector
    kmemleak: Remove some of the kmemleak false positives
    kmemleak: Add modules support
    kmemleak: Add kmemleak_alloc callback from alloc_large_system_hash
    kmemleak: Add the vmalloc memory allocation/freeing hooks
    kmemleak: Add the slub memory allocation/freeing hooks
    kmemleak: Add the slob memory allocation/freeing hooks
    kmemleak: Add the slab memory allocation/freeing hooks
    kmemleak: Add documentation on the memory leak detector
    kmemleak: Add the base support

    Manual conflict resolution (with the slab/earlyboot changes) in:
    drivers/char/vt.c
    init/main.c
    mm/slab.c

    Linus Torvalds
     
  • …s/security-testing-2.6

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (44 commits)
    nommu: Provide mmap_min_addr definition.
    TOMOYO: Add description of lists and structures.
    TOMOYO: Remove unused field.
    integrity: ima audit dentry_open failure
    TOMOYO: Remove unused parameter.
    security: use mmap_min_addr indepedently of security models
    TOMOYO: Simplify policy reader.
    TOMOYO: Remove redundant markers.
    SELinux: define audit permissions for audit tree netlink messages
    TOMOYO: Remove unused mutex.
    tomoyo: avoid get+put of task_struct
    smack: Remove redundant initialization.
    integrity: nfsd imbalance bug fix
    rootplug: Remove redundant initialization.
    smack: do not beyond ARRAY_SIZE of data
    integrity: move ima_counts_get
    integrity: path_check update
    IMA: Add __init notation to ima functions
    IMA: Minimal IMA policy and boot param for TCB IMA policy
    selinux: remove obsolete read buffer limit from sel_read_bool
    ...

    Linus Torvalds
     
  • This patch handles the kmemleak operations needed for modules loading so
    that memory allocations from inside a module are properly tracked.

    Signed-off-by: Catalin Marinas

    Catalin Marinas
     

08 May, 2009

1 commit


17 Apr, 2009

1 commit

  • The hooks in the module code for the function tracer must be called
    before any of that module code runs. The function tracer hooks
    modify the module (replacing calls to mcount to nops). If the code
    is executed while the change occurs, then the CPU can take a GPF.

    To handle the above with a bit of paranoia, I originally implemented
    the hooks as calls directly from the module code.

    After examining the notifier calls, it looks as though the start up
    notify is called before any of the module's code is executed. This makes
    the use of the notify safe with ftrace.

    Only the startup notify is required to be "safe". The shutdown simply
    removes the entries from the ftrace function list, and does not modify
    any code.

    This change has another benefit. It removes a issue with a reverse dependency
    in the mutexes of ftrace_lock and module_mutex.

    [ Impact: fix lock dependency bug, cleanup ]

    Cc: Rusty Russell
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

15 Apr, 2009

2 commits

  • Commit 3d43321b7015387cfebbe26436d0e9d299162ea1 ("modules: sysctl to
    block module loading") introduces a modules_disabled variable that is
    only defined if CONFIG_MODULE_UNLOAD is enabled, despite being used in
    other places. This moves it up and fixes up the build.

    CC kernel/module.o
    kernel/module.c: In function 'sys_init_module':
    kernel/module.c:2401: error: 'modules_disabled' undeclared (first use in this function)
    kernel/module.c:2401: error: (Each undeclared identifier is reported only once
    kernel/module.c:2401: error: for each function it appears in.)
    make[1]: *** [kernel/module.o] Error 1
    make: *** [kernel/module.o] Error 2

    Signed-off-by: Paul Mundt
    Signed-off-by: James Morris

    Stephen Rothwell
     
  • Impact: allow modules to add TRACE_EVENTS on load

    This patch adds the final hooks to allow modules to use the TRACE_EVENT
    macro. A notifier and a data structure are used to link the TRACE_EVENTs
    defined in the module to connect them with the ftrace event tracing system.

    It also adds the necessary automated clean ups to the trace events when a
    module is removed.

    Cc: Rusty Russell
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

12 Apr, 2009

1 commit

  • Several drivers use asynchronous work to do device discovery, and we
    synchronize with them in the compiled-in case before we actually try to
    mount root filesystems etc.

    However, when compiled as modules, that synchronization is missing - the
    module loading completes, but the driver hasn't actually finished
    probing for devices, and that means that any user mode that expects to
    use the devices after the 'insmod' is now potentially broken.

    We already saw one case of a similar issue in the ACPI battery code,
    where the kernel itself expected the module to be all done, and unmapped
    the init memory - but the async device discovery was still running.
    That got hacked around by just removing the "__init" (see commit
    5d38258ec026921a7b266f4047ebeaa75db358e5 "ACPI battery: fix async boot
    oops"), but the real fix is to just make the module loading wait for all
    async work to be completed.

    It will slow down module loading, but since common devices should be
    built in anyway, and since the bug is really annoying and hard to handle
    from user space (and caused several S3 resume regressions), the simple
    fix to wait is the right one.

    This fixes at least

    http://bugzilla.kernel.org/show_bug.cgi?id=13063

    but probably a few other bugzilla entries too (12936, for example), and
    is confirmed to fix Rafael's storage driver breakage after resume bug
    report (no bugzilla entry).

    We should also be able to now revert that ACPI battery fix.

    Reported-and-tested-by: Rafael J. Wysocki
    Tested-by: Heinz Diehl
    Acked-by: Arjan van de Ven
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

07 Apr, 2009

1 commit

  • This reverts commit 9cb610d8e35fe3ec95a2fe2030b02f85aeea83c1.

    This was an impressively stupid patch. Firstly, we reset the SHF_ALLOC
    flag lower down in the same function, so the patch was useless. Even
    better, find_sec() ignores sections with SHF_ALLOC not set, so
    it breaks CONFIG_MODVERSIONS=y with CONFIG_MODULE_FORCE_LOAD=n, which
    refuses to load the module since it can't find the __versions section.

    Signed-off-by: Rusty Russell

    Rusty Russell
     

06 Apr, 2009

1 commit

  • * 'tracing-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (413 commits)
    tracing, net: fix net tree and tracing tree merge interaction
    tracing, powerpc: fix powerpc tree and tracing tree interaction
    ring-buffer: do not remove reader page from list on ring buffer free
    function-graph: allow unregistering twice
    trace: make argument 'mem' of trace_seq_putmem() const
    tracing: add missing 'extern' keywords to trace_output.h
    tracing: provide trace_seq_reserve()
    blktrace: print out BLK_TN_MESSAGE properly
    blktrace: extract duplidate code
    blktrace: fix memory leak when freeing struct blk_io_trace
    blktrace: fix blk_probes_ref chaos
    blktrace: make classic output more classic
    blktrace: fix off-by-one bug
    blktrace: fix the original blktrace
    blktrace: fix a race when creating blk_tree_root in debugfs
    blktrace: fix timestamp in binary output
    tracing, Text Edit Lock: cleanup
    tracing: filter fix for TRACE_EVENT_FORMAT events
    ftrace: Using FTRACE_WARN_ON() to check "freed record" in ftrace_release()
    x86: kretprobe-booster interrupt emulation code fix
    ...

    Fix up trivial conflicts in
    arch/parisc/include/asm/ftrace.h
    include/linux/memory.h
    kernel/extable.c
    kernel/module.c

    Linus Torvalds
     

03 Apr, 2009

1 commit

  • Implement a sysctl file that disables module-loading system-wide since
    there is no longer a viable way to remove CAP_SYS_MODULE after the system
    bounding capability set was removed in 2.6.25.

    Value can only be set to "1", and is tested only if standard capability
    checks allow CAP_SYS_MODULE. Given existing /dev/mem protections, this
    should allow administrators a one-way method to block module loading
    after initial boot-time module loading has finished.

    Signed-off-by: Kees Cook
    Acked-by: Serge Hallyn
    Signed-off-by: James Morris

    Kees Cook
     

02 Apr, 2009

1 commit


31 Mar, 2009

5 commits

  • Impact: minor cleanup.

    I'm not going to neaten anyone else's code, but I'm happy to clean up
    my own.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Kay Sievers discovered that boot times are slowed
    by about half a second because all the stop_machine_create() calls,
    and he only probes about 40 modules (I have 125 loaded on this laptop).

    We only do stop_machine_create() so we can unlink the module if
    something goes wrong, but it's overkill (and buggy anyway: if
    stop_machine_create() fails we still call stop_machine_destroy()).

    Since we are only protecting against kallsyms (esp. oops) walking the
    list, synchronize_sched() is sufficient (synchronize_rcu() is probably
    sufficient, but we're not in a hurry).

    Kay says of this patch:
    ... no module takes more than 40 millisecs to link now, most of
    them are between 3 and 8 millisecs.

    That looks very different to the numbers without this patch
    and the otherwise same setup, where we get heavy noise in the
    traces and many delays of up to 200 millisecs until linking,
    most of them taking 30+ millisecs.

    Tested-by: Kay Sievers
    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • With CONFIG_MODVERSIONS, we version 'struct module' using a dummy
    export, but other things matter too:

    1) 'struct modversion_info' determines the layout of the __versions section,
    2) 'struct kernel_param' determines the layout of the __params section,
    3) 'struct kernel_symbol' determines __ksymtab*.
    4) 'struct marker' determines __markers.
    5) 'struct tracepoint' determines __tracepoints.

    So we rename 'struct_module' to 'module_layout' and include these in
    the signature. Now it's general we can add others later on without
    confusion.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Impact: reduce kernel memory usage

    This patch just takes off the SHF_ALLOC flag on __versions so we don't
    keep them around after module load.

    This saves about 7% of module memory if CONFIG_MODVERSIONS=y.

    Cc: Shawn Bohrer
    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Impact: Message cleanup

    Two of three callers of try_to_force_load() are not because of a
    missing version, so change the messages:

    Old:
    : no version for "magic" found: kernel tainted.
    New:
    : bad vermagic: kernel tainted.

    Old:
    : no version for "nocrc" found: kernel tainted.
    New:
    : no versions for exported symbols: kernel tainted.

    Old:
    : no version for "" found: kernel tainted.
    New:
    : : kernel tainted.

    Signed-off-by: Rusty Russell

    Rusty Russell