03 Feb, 2011

1 commit

  • Make the tracepoints more robust, making them solid enough to handle compiler
    changes by not relying on anything based on compiler-specific behavior with
    respect to structure alignment. Implement an approach proposed by David Miller:
    use an array of const pointers to refer to the individual structures, and export
    this pointer array through the linker script rather than the structures per se.
    It will consume 32 extra bytes per tracepoint (24 for structure padding and 8
    for the pointers), but are less likely to break due to compiler changes.

    History:

    commit 7e066fb8 tracepoints: add DECLARE_TRACE() and DEFINE_TRACE()
    added the aligned(32) type and variable attribute to the tracepoint structures
    to deal with gcc happily aligning statically defined structures on 32-byte
    multiples.

    One attempt was to use a 8-byte alignment for tracepoint structures by applying
    both the variable and type attribute to tracepoint structures definitions and
    declarations. It worked fine with gcc 4.5.1, but broke with gcc 4.4.4 and 4.4.5.

    The reason is that the "aligned" attribute only specify the _minimum_ alignment
    for a structure, leaving both the compiler and the linker free to align on
    larger multiples. Because tracepoint.c expects the structures to be placed as an
    array within each section, up-alignment cause NULL-pointer exceptions due to the
    extra unexpected padding.

    (this patch applies on top of -tip)

    Signed-off-by: Mathieu Desnoyers
    Acked-by: David S. Miller
    LKML-Reference:
    CC: Frederic Weisbecker
    CC: Ingo Molnar
    CC: Thomas Gleixner
    CC: Andrew Morton
    CC: Peter Zijlstra
    CC: Rusty Russell
    Signed-off-by: Steven Rostedt

    Mathieu Desnoyers
     

23 Dec, 2010

2 commits

  • The commit:

    84e1c6bb38eb318e456558b610396d9f1afaabf0
    x86: Add RO/NX protection for loadable kernel modules

    Broke the function tracer with this output:

    ------------[ cut here ]------------
    WARNING: at kernel/trace/ftrace.c:1014 ftrace_bug+0x114/0x171()
    Hardware name: Precision WorkStation 470
    Modules linked in: i2c_core(+)
    Pid: 86, comm: modprobe Not tainted 2.6.37-rc2+ #68
    Call Trace:
    [] warn_slowpath_common+0x85/0x9d
    [] ? __process_new_adapter+0x7/0x34 [i2c_core]
    [] ? __process_new_adapter+0x7/0x34 [i2c_core]
    [] warn_slowpath_null+0x1a/0x1c
    [] ftrace_bug+0x114/0x171
    [] ? __process_new_adapter+0x7/0x34 [i2c_core]
    [] ftrace_process_locs+0x1ae/0x274
    [] ? __process_new_adapter+0x7/0x34 [i2c_core]
    [] ftrace_module_notify+0x39/0x44
    [] notifier_call_chain+0x37/0x63
    [] __blocking_notifier_call_chain+0x46/0x5b
    [] blocking_notifier_call_chain+0x14/0x16
    [] sys_init_module+0x73/0x1f3
    [] system_call_fastpath+0x16/0x1b
    ---[ end trace 2aff4f4ca53ec746 ]---
    ftrace faulted on writing []
    __process_new_adapter+0x7/0x34 [i2c_core]

    The cause was that the module text was set to read only before ftrace
    could convert the calls to mcount to nops. Thus, the conversions failed
    due to not being able to write to the text locations.

    The simple fix is to move setting the module to read only after the
    module notifiers are called (where ftrace sets the module mcounts to nops).

    Reported-by: Peter Zijlstra
    Acked-by: Rusty Russell
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     
  • Ingo Molnar
     

18 Nov, 2010

1 commit

  • This patch is a logical extension of the protection provided by
    CONFIG_DEBUG_RODATA to LKMs. The protection is provided by
    splitting module_core and module_init into three logical parts
    each and setting appropriate page access permissions for each
    individual section:

    1. Code: RO+X
    2. RO data: RO+NX
    3. RW data: RW+NX

    In order to achieve proper protection, layout_sections() have
    been modified to align each of the three parts mentioned above
    onto page boundary. Next, the corresponding page access
    permissions are set right before successful exit from
    load_module(). Further, free_module() and sys_init_module have
    been modified to set module_core and module_init as RW+NX right
    before calling module_free().

    By default, the original section layout and access flags are
    preserved. When compiled with CONFIG_DEBUG_SET_MODULE_RONX=y,
    the patch will page-align each group of sections to ensure that
    each page contains only one type of content and will enforce
    RO/NX for each group of pages.

    -v1: Initial proof-of-concept patch.
    -v2: The patch have been re-written to reduce the number of #ifdefs
    and to make it architecture-agnostic. Code formatting has also
    been corrected.
    -v3: Opportunistic RO/NX protection is now unconditional. Section
    page-alignment is enabled when CONFIG_DEBUG_RODATA=y.
    -v4: Removed most macros and improved coding style.
    -v5: Changed page-alignment and RO/NX section size calculation
    -v6: Fixed comments. Restricted RO/NX enforcement to x86 only
    -v7: Introduced CONFIG_DEBUG_SET_MODULE_RONX, added
    calls to set_all_modules_text_rw() and set_all_modules_text_ro()
    in ftrace
    -v8: updated for compatibility with linux 2.6.33-rc5
    -v9: coding style fixes
    -v10: more coding style fixes
    -v11: minor adjustments for -tip
    -v12: minor adjustments for v2.6.35-rc2-tip
    -v13: minor adjustments for v2.6.37-rc1-tip

    Signed-off-by: Siarhei Liakh
    Signed-off-by: Xuxian Jiang
    Acked-by: Arjan van de Ven
    Reviewed-by: James Morris
    Signed-off-by: H. Peter Anvin
    Cc: Andi Kleen
    Cc: Rusty Russell
    Cc: Stephen Rothwell
    Cc: Dave Jones
    Cc: Kees Cook
    Cc: Linus Torvalds
    LKML-Reference:
    [ minor cleanliness edits, -v14: build failure fix ]
    Signed-off-by: Ingo Molnar

    matthieu castet
     

11 Nov, 2010

1 commit

  • On use of trace_printk() there's a macro that determines if the format
    is static or a variable. If it is static, it defaults to __trace_bprintk()
    otherwise it uses __trace_printk().

    A while ago, Lai Jiangshan added __trace_bprintk(). In that patch, we
    discussed a way to allow modules to use it. The difference between
    __trace_bprintk() and __trace_printk() is that for faster processing,
    just the format and args are stored in the trace instead of running
    it through a sprintf function. In order to do this, the format used
    by the __trace_bprintk() had to be persistent.

    See commit 1ba28e02a18cbdbea123836f6c98efb09cbf59ec

    The problem comes with trace_bprintk() where the module is unloaded.
    The pointer left in the buffer is still pointing to the format.

    To solve this issue, the formats in the module were copied into kernel
    core. If the same format was used, they would use the same copy (to prevent
    memory leak). This all worked well until we tried to merge everything.

    At the time this was written, Lai Jiangshan, Frederic Weisbecker,
    Ingo Molnar and myself were all touching the same code. When this was
    merged, we lost the part of it that was in module.c. This kept out the
    copying of the formats and unloading the module could cause bad pointers
    left in the ring buffer.

    This patch adds back (with updates required for current kernel) the
    module code that sets up the necessary pointers.

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

    Steven Rostedt
     

27 Oct, 2010

1 commit

  • Building with CONFIG_KALLSYMS=n gives following warning:

    /mnt/src/linux-git/kernel/module.c: In function ‘post_relocation’:
    /mnt/src/linux-git/kernel/module.c:2534:2: warning: passing argument 2 of ‘add_kallsyms’ discards qualifiers from pointer target type
    /mnt/src/linux-git/kernel/module.c:2038:13: note: expected ‘struct load_info *’ but argument is of type ‘const struct load_info *’

    Signed-off-by: Michał Mirosław
    Signed-off-by: Rusty Russell

    Michał Mirosław
     

08 Oct, 2010

1 commit


06 Oct, 2010

1 commit

  • With all the recent module loading cleanups, we've minimized the code
    that sits under module_mutex, fixing various deadlocks and making it
    possible to do most of the module loading in parallel.

    However, that whole conversion totally missed the rather obscure code
    that adds a new module to the list for BUG() handling. That code was
    doubly obscure because (a) the code itself lives in lib/bugs.c (for
    dubious reasons) and (b) it gets called from the architecture-specific
    "module_finalize()" rather than from generic code.

    Calling it from arch-specific code makes no sense what-so-ever to begin
    with, and is now actively wrong since that code isn't protected by the
    module loading lock any more.

    So this commit moves the "module_bug_{finalize,cleanup}()" calls away
    from the arch-specific code, and into the generic code - and in the
    process protects it with the module_mutex so that the list operations
    are now safe.

    Future fixups:
    - move the module list handling code into kernel/module.c where it
    belongs.
    - get rid of 'module_bug_list' and just use the regular list of modules
    (called 'modules' - imagine that) that we already create and maintain
    for other reasons.

    Reported-and-tested-by: Thomas Gleixner
    Cc: Rusty Russell
    Cc: Adrian Bunk
    Cc: Andrew Morton
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

23 Sep, 2010

1 commit

  • base patch to implement 'jump labeling'. Based on a new 'asm goto' inline
    assembly gcc mechanism, we can now branch to labels from an 'asm goto'
    statment. This allows us to create a 'no-op' fastpath, which can subsequently
    be patched with a jump to the slowpath code. This is useful for code which
    might be rarely used, but which we'd like to be able to call, if needed.
    Tracepoints are the current usecase that these are being implemented for.

    Acked-by: David S. Miller
    Signed-off-by: Jason Baron
    LKML-Reference:

    [ cleaned up some formating ]

    Signed-off-by: Steven Rostedt

    Jason Baron
     

05 Aug, 2010

19 commits

  • On my (32-bit x86) machine, sys_init_module() uses 124 bytes of stack
    once load_module() is inlined.

    This effectively reverts ffb4ba76 which inlined it due to stack
    pressure.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • This simply hoists more code out of load_module; we also put the
    identification of the extable and dynamic debug table in with the
    others in find_module_sections().

    We move the taint check to the actual add/remove of the dynamic debug
    info: this is certain (find_module_sections is too early).

    Signed-off-by: Rusty Russell
    Cc: Yehuda Sadeh

    Rusty Russell
     
  • Instead of copying and allocating the args and storing it in
    load_info, we can just allocate them right before we need them.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Pass the struct load_info into all the other functions in module
    loading. This neatens things and makes them more consistent.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Restore the stub module_remove_modinfo_attrs, remove the now-unused
    !CONFIG_SYSFS module_sysfs_init.

    Also, rename mod_kobject_remove() to mod_sysfs_teardown() as
    it is the logical counterpart to mod_sysfs_setup now.

    Reported-by: Randy Dunlap
    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • We change the sysfs functions to take struct load_info, and call
    them all in mod_sysfs_setup().

    We also clean up the #ifdefs a little.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • layout_and_allocate() does everything up to and including the final
    struct module placement inside the allocated module memory. We have
    to store the symbol layout information in our struct load_info though.

    This avoids the nasty code we had before where 'mod' pointed first
    to the version inside the temporary allocation containing the entire
    file, then later was moved to point to the real struct module: now
    the main code only ever sees the final module address.

    (Includes fix for the Tony Luck-found Linus-diagnosed failure path
    error).

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Andrew had the sole pleasure of tickling this bug in linux-next; when we set
    up "info->strtab" it's pointing into the temporary copy of the module. For
    most uses that is fine, but kallsyms keeps a pointer around during module
    load (inside mod->strtab).

    If we oops for some reason inside a module's init function, kallsyms will use
    the mod->strtab pointer into the now-freed temporary module copy.

    (Later oopses work fine: after init we overwrite mod->strtab to point to a
    compacted core-only strtab).

    Reported-by: Andrew "Grumpy" Morton
    Signed-off-by: Rusty "Buggy" Russell
    Tested-by: Andrew "Happy" Morton
    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Simple refactor causes us to lift struct definition to top of file.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • We can't do the find_sec after removing the SHF_ALLOC flags; it won't
    find the sections.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Put all the "rewrite and check section headers" in one place. This
    adds another iteration over the sections, but it's far clearer. We
    iterate once for every find_section() so we already iterate over many
    times.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Btw, here's a patch that _looks_ large, but it really pretty trivial, and
    sets things up so that it would be way easier to split off pieces of the
    module loading.

    The reason it looks large is that it creates a "module_info" structure
    that contains all the module state that we're building up while loading,
    instead of having individual variables for all the indices etc.

    So the patch ends up being large, because every "symindex" access instead
    becomes "info.index.sym" etc. That may be a few characters longer, but it
    then means that we can just pass a pointer to that "info" structure
    around. and let all the pieces fill it in very naturally.

    As an example of that, the patch also moves the initialization of all
    those convenience variables into a "setup_module_info()" function. And at
    this point it really does become very natural to start to peel off some of
    the error labels and move them into the helper functions - now the
    "truncated" case is gone, and is handled inside that setup function
    instead.

    So maybe you don't like this approach, and it does make the variable
    accesses a bit longer, but I don't think unreadably so. And the patch
    really does look big and scary, but there really should be absolutely no
    semantic changes - most of it was a trivial and mindless rename.

    In fact, it was so mindless that I on purpose kept the existing helper
    functions looking like this:

    - err = check_modinfo(mod, sechdrs, infoindex, versindex);
    + err = check_modinfo(mod, info.sechdrs, info.index.info, info.index.vers);

    rather than changing them to just take the "info" pointer. IOW, a second
    phase (if you think the approach is ok) would change that calling
    convention to just do

    err = check_modinfo(mod, &info);

    (and same for "layout_sections()", "layout_symtabs()" etc.) Similarly,
    while right now it makes things _look_ bigger, with things like this:

    versindex = find_sec(hdr, sechdrs, secstrings, "__versions");

    becoming

    info->index.vers = find_sec(info->hdr, info->sechdrs, info->secstrings, "__versions");

    in the new "setup_module_info()" function, that's again just a result of
    it being a search-and-replace patch. By using the 'info' pointer, we could
    just change the 'find_sec()' interface so that it ends up being

    info->index.vers = find_sec(info, "__versions");

    instead, and then we'd actually have a shorter and more readable line. So
    for a lot of those mindless variable name expansions there's would be room
    for separate cleanups.

    I didn't move quite everything in there - if we do this to layout_symtabs,
    for example, we'd want to move the percpu, symoffs, stroffs, *strmap
    variables to be fields in that module_info structure too. But that's a
    much smaller patch, I moved just the really core stuff that is currently
    being set up and used in various parts.

    But even in this rough form, it removes close to 70 lines from that
    function (but adds 22 lines overall, of course - the structure definition,
    the helper function declarations and call-sites etc etc).

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

    Linus Torvalds
     
  • And now that I'm looking at that call-chain (to see if it would make sense
    to use some other more specific lock - doesn't look like it: all the
    readers are using RCU and this is the only writer), I also give you this
    trivial one-liner. It changes each_symbol() to not put that constant array
    on the stack, resulting in changing

    movq $C.388.31095, %rsi #, tmp85
    subq $376, %rsp #,
    movq %rdi, %rbx # fn, fn
    leaq -208(%rbp), %rdi #, tmp84
    movq %rbx, %rdx # fn,
    rep movsl
    xorl %esi, %esi #
    leaq -208(%rbp), %rdi #, tmp87
    movq %r12, %rcx # data,
    call each_symbol_in_section.clone.0 #

    into

    xorl %esi, %esi #
    subq $216, %rsp #,
    movq %rdi, %rbx # fn, fn
    movq $arr.31078, %rdi #,
    call each_symbol_in_section.clone.0 #

    which is not so much about being obviously shorter and simpler because we
    don't unnecessarily copy that constant array around onto the stack, but
    also about having a much smaller stack footprint (376 vs 216 bytes - see
    the update of 'rsp').

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

    Linus Torvalds
     
  • 1) Extract out the relocation loop into apply_relocations
    2) Extract license and version checks into check_module_license_and_versions
    3) Extract icache flushing into flush_module_icache
    4) Move __obsparm warning into find_module_sections
    5) Move license setting into check_modinfo.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Allocate references inside module_unload_init(), clean up inside
    module_unload_free().

    This version fixed to do allocation before __this_cpu_write, thanks to
    bug reports from linux-next from Dave Young
    and Stephen Rothwell .

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Extract out the allocation and copying in from userspace, and the
    first set of modinfo checks.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Here's a second one. It's slightly less trivial - since we now have error
    cases - and equally untested so it may well be totally broken. But it also
    cleans up a bit more, and avoids one of the goto targets, because the
    "move_module()" helper now does both allocations or none.

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

    Linus Torvalds
     
  • I'd start from the trivial stuff. There's a fair amount of straight-line
    code that just makes the function hard to read just because you have to
    page up and down so far. Some of it is trivial to just create a helper
    function for.

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

    Linus Torvalds
     
  • No need to clear mod->refptr in module_unload_init(), since
    alloc_percpu() already clears allocated chunks.

    Signed-off-by: Eric Dumazet
    Signed-off-by: Rusty Russell (removed unused var)

    Eric Dumazet
     

28 Jul, 2010

1 commit

  • The command

    echo "file ec.c +p" >/sys/kernel/debug/dynamic_debug/control

    causes an oops.

    Move the call to ddebug_remove_module() down into free_module(). In this
    way it should be called from all error paths. Currently, we are missing
    the remove if the module init routine fails.

    Signed-off-by: Jason Baron
    Reported-by: Thomas Renninger
    Tested-by: Thomas Renninger
    Cc: [2.6.32+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jason Baron
     

05 Jul, 2010

1 commit

  • We should initialize the module dynamic debug datastructures
    only after determining that the module is not loaded yet. This
    fixes a bug that introduced in 2.6.35-rc2, where when a trying
    to load a module twice, we also load it's dynamic printing data
    twice which causes all sorts of nasty issues. Also handle
    the dynamic debug cleanup later on failure.

    Signed-off-by: Yehuda Sadeh
    Signed-off-by: Rusty Russell (removed a #ifdef)
    Signed-off-by: Linus Torvalds

    Yehuda Sadeh
     

05 Jun, 2010

8 commits

  • Problem: it's hard to avoid an init routine stumbling over a
    request_module these days. And it's not clear it's always a bad idea:
    for example, a module like kvm with dynamic dependencies on kvm-intel
    or kvm-amd would be neater if it could simply request_module the right
    one.

    In this particular case, it's libcrc32c:

    libcrc32c_mod_init
    crypto_alloc_shash
    crypto_alloc_tfm
    crypto_find_alg
    crypto_alg_mod_lookup
    crypto_larval_lookup
    request_module

    If another module is waiting inside resolve_symbol() for libcrc32c to
    finish initializing (ie. bne2 depends on libcrc32c) then it does so
    holding the module lock, and our request_module() can't make progress
    until that is released.

    Waiting inside resolve_symbol() without the lock isn't all that hard:
    we just need to pass the -EBUSY up the call chain so we can sleep
    where we don't hold the lock. Error reporting is a bit trickier: we
    need to copy the name of the unfinished module before releasing the
    lock.

    Other notes:
    1) This also fixes a theoretical issue where a weak dependency would allow
    symbol version mismatches to be ignored.
    2) We rename use_module to ref_module to make life easier for the only
    external user (the out-of-tree ksplice patches).

    Signed-off-by: Rusty Russell
    Cc: Linus Torvalds
    Cc: Tim Abbot
    Tested-by: Brandon Philips

    Rusty Russell
     
  • It disabled preempt so it was "safe", but nothing stops another module
    slipping in before this module is added to the global list now we don't
    hold the lock the whole time.

    So we check this just after we check for duplicate modules, and just
    before we put the module in the global list.

    (find_symbol finds symbols in coming and going modules, too).

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • I think Rusty may have made the lock a bit _too_ finegrained there, and
    didn't add it to some places that needed it. It looks, for example, like
    PATCH 1/2 actually drops the lock in places where it's needed
    ("find_module()" is documented to need it, but now load_module() didn't
    hold it at all when it did the find_module()).

    Rather than adding a new "module_loading" list, I think we should be able
    to just use the existing "modules" list, and just fix up the locking a
    bit.

    In fact, maybe we could just move the "look up existing module" a bit
    later - optimistically assuming that the module doesn't exist, and then
    just undoing the work if it turns out that we were wrong, just before
    adding ourselves to the list.

    Signed-off-by: Rusty Russell

    Linus Torvalds
     
  • Kay Sievers reports that we still have some
    contention over module loading which is slowing boot.

    Linus also disliked a previous "drop lock and regrab" patch to fix the
    bne2 "gave up waiting for init of module libcrc32c" message.

    This is more ambitious: we only grab the lock where we need it.

    Signed-off-by: Rusty Russell
    Cc: Brandon Philips
    Cc: Kay Sievers
    Cc: Linus Torvalds

    Rusty Russell
     
  • These were placed in the header in ef665c1a06 to get the various
    SYSFS/MODULE config combintations to compile.

    That may have been necessary then, but it's not now. These functions
    are all local to module.c.

    Signed-off-by: Rusty Russell
    Cc: Randy Dunlap

    Rusty Russell
     
  • This means a little extra work, but is more logical: we don't put
    anything in sysfs until we're about to put the module into the
    global list an parse its parameters.

    This also gives us a logical place to put duplicate module detection
    in the next patch.

    Signed-off-by: Rusty Russell

    Rusty Russell
     
  • Linus changed the structure, and luckily this didn't compile any more.

    Reported-by: Stephen Rothwell
    Signed-off-by: Rusty Russell
    Cc: Jason Wessel
    Cc: Martin Hicks

    Rusty Russell
     
  • When adding a module that depends on another one, we used to create a
    one-way list of "modules_which_use_me", so that module unloading could
    see who needs a module.

    It's actually quite simple to make that list go both ways: so that we
    not only can see "who uses me", but also see a list of modules that are
    "used by me".

    In fact, we always wanted that list in "module_unload_free()": when we
    unload a module, we want to also release all the other modules that are
    used by that module. But because we didn't have that list, we used to
    first iterate over all modules, and then iterate over each "used by me"
    list of that module.

    By making the list two-way, we simplify module_unload_free(), and it
    allows for some trivial fixes later too.

    Signed-off-by: Linus Torvalds
    Signed-off-by: Rusty Russell (cleaned & rebased)

    Linus Torvalds
     

01 Jun, 2010

2 commits

  • * 'for-35' of git://repo.or.cz/linux-kbuild: (81 commits)
    kbuild: Revert part of e8d400a to resolve a conflict
    kbuild: Fix checking of scm-identifier variable
    gconfig: add support to show hidden options that have prompts
    menuconfig: add support to show hidden options which have prompts
    gconfig: remove show_debug option
    gconfig: remove dbg_print_ptype() and dbg_print_stype()
    kconfig: fix zconfdump()
    kconfig: some small fixes
    add random binaries to .gitignore
    kbuild: Include gen_initramfs_list.sh and the file list in the .d file
    kconfig: recalc symbol value before showing search results
    .gitignore: ignore *.lzo files
    headerdep: perlcritic warning
    scripts/Makefile.lib: Align the output of LZO
    kbuild: Generate modules.builtin in make modules_install
    Revert "kbuild: specify absolute paths for cscope"
    kbuild: Do not unnecessarily regenerate modules.builtin
    headers_install: use local file handles
    headers_check: fix perl warnings
    export_report: fix perl warnings
    ...

    Linus Torvalds
     
  • Rafael sees a sometimes crash at precpu_modfree from kernel/module.c; it
    only occurred with another (since-reverted) patch, but that patch simply
    changed timing to uncover this bug, it was otherwise unrelated.

    The comment about the mod being freed is self-explanatory, but neither
    Tejun nor I read it. This bug was introduced in 259354deaa, after it
    had previously been fixed in 6e2b75740b. How embarrassing.

    Reported-by: "Rafael J. Wysocki"
    Signed-off-by: Rusty Russell
    Embarrassingly-Acked-by: Tejun Heo
    Cc: Masami Hiramatsu
    Tested-by: "Rafael J. Wysocki"
    Signed-off-by: Linus Torvalds

    Rusty Russell