30 Oct, 2020

1 commit

  • There is a regular need in the kernel to provide a way to declare having a
    dynamically sized set of trailing elements in a structure. Kernel code should
    always use “flexible array members”[1] for these cases. The older style of
    one-element or zero-length arrays should no longer be used[2].

    [1] https://en.wikipedia.org/wiki/Flexible_array_member
    [2] https://www.kernel.org/doc/html/v5.9-rc1/process/deprecated.html#zero-length-and-one-element-arrays

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

28 Jul, 2020

2 commits

  • For bitmasks printing values in hex is more convenient.

    Prefix with `0x` to make it clear, that it’s a hex value, and pad it
    out.

    Using the helper for `amdgpu.ppfeaturemask`, it will look like below.

    Before:

    $ more /sys/module/amdgpu/parameters/ppfeaturemask
    4294950911

    After:

    $ more /sys/module/amdgpu/parameters/ppfeaturemask
    0xffffbfff

    Cc: linux-kernel@vger.kernel.org
    Cc: amd-gfx@lists.freedesktop.org
    Signed-off-by: Paul Menzel
    Acked-by: Linus Torvalds
    Reviewed-by: Christian König
    Signed-off-by: Christian König
    Link: https://patchwork.freedesktop.org/patch/374726/

    Paul Menzel
     
  • The second and third arguments are aligned with tabs, so do the same for
    the fourth.

    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Paul Menzel
    Reviewed-by: Christian König
    Signed-off-by: Christian König
    Link: https://lore.kernel.org/patchwork/patch/1267600/

    Paul Menzel
     

20 Aug, 2019

1 commit


31 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version this program is distributed in the
    hope that it will be useful but without any warranty without even
    the implied warranty of merchantability or fitness for a particular
    purpose see the gnu general public license for more details you
    should have received a copy of the gnu general public license along
    with this program if not write to the free software foundation inc
    59 temple place suite 330 boston ma 02111 1307 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 1334 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Richard Fontana
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190527070033.113240726@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

12 Apr, 2018

1 commit

  • As using an unsafe module parameter is, by its very definition, an
    expected user action, emitting a warning is overkill. Nothing has yet
    gone wrong, and we add a taint flag for any future oops should something
    actually go wrong. So instead of having a user controllable pr_warn,
    downgrade it to a pr_notice for "a normal, but significant condition".

    We make use of unsafe kernel parameters in igt
    (https://cgit.freedesktop.org/drm/igt-gpu-tools/) (we have not yet
    succeeded in removing all such debugging options), which generates a
    warning and taints the kernel. The warning is unhelpful as we then need
    to filter it out again as we check that every test themselves do not
    provoke any kernel warnings.

    Link: http://lkml.kernel.org/r/20180226151919.9674-1-chris@chris-wilson.co.uk
    Fixes: 91f9d330cc14 ("module: make it possible to have unsafe, tainting module params")
    Signed-off-by: Chris Wilson
    Acked-by: Jani Nikula
    Reviewed-by: Andrew Morton
    Cc: Rusty Russell
    Cc: Jean Delvare
    Cc: Li Zhong
    Cc: Petri Latvala
    Cc: Daniel Vetter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Wilson
     

04 Oct, 2017

4 commits

  • Align the parameters passed to STANDARD_PARAM_DEF for clarity.

    Link: http://lkml.kernel.org/r/20170928162728.756143cc@endymion
    Signed-off-by: Jean Delvare
    Suggested-by: Ingo Molnar
    Acked-by: Ingo Molnar
    Cc: Baoquan He
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • Function param_attr_show could overflow the buffer it is operating on.

    The buffer size is PAGE_SIZE, and the string returned by
    attribute->param->ops->get is generated by scnprintf(buffer, PAGE_SIZE,
    ...) so it could be PAGE_SIZE - 1 long, with the terminating '\0' at the
    very end of the buffer. Calling strcat(..., "\n") on this isn't safe, as
    the '\0' will be replaced by '\n' (OK) and then another '\0' will be added
    past the end of the buffer (not OK.)

    Simply add the trailing '\n' when writing the attribute contents to the
    buffer originally. This is safe, and also faster.

    Credits to Teradata for discovering this issue.

    Link: http://lkml.kernel.org/r/20170928162602.60c379c7@endymion
    Signed-off-by: Jean Delvare
    Acked-by: Ingo Molnar
    Cc: Baoquan He
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • The length parameter of strlcpy() is supposed to reflect the size of the
    target buffer, not of the source string. Harmless in this case as the
    buffer is PAGE_SIZE long and the source string is always much shorter than
    this, but conceptually wrong, so let's fix it.

    Link: http://lkml.kernel.org/r/20170928162515.24846b4f@endymion
    Signed-off-by: Jean Delvare
    Acked-by: Ingo Molnar
    Cc: Baoquan He
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • This parameter is named kp, so the documentation should use that.

    Fixes: 9b473de87209 ("param: Fix duplicate module prefixes")
    Link: http://lkml.kernel.org/r/20170919142656.64aea59e@endymion
    Signed-off-by: Jean Delvare
    Acked-by: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     

18 Apr, 2017

1 commit

  • next_arg() will be used to parse boot parameters in the x86/boot/compressed code,
    so move it to lib/cmdline.c for better code reuse.

    No change in functionality.

    Signed-off-by: Baoquan He
    Cc: Andrew Morton
    Cc: Gustavo Padovan
    Cc: Jens Axboe
    Cc: Jessica Yu
    Cc: Johannes Berg
    Cc: Josh Triplett
    Cc: Larry Finger
    Cc: Linus Torvalds
    Cc: Niklas Söderlund
    Cc: Peter Zijlstra
    Cc: Petr Mladek
    Cc: Rasmus Villemoes
    Cc: Thomas Gleixner
    Cc: dan.j.williams@intel.com
    Cc: dave.jiang@intel.com
    Cc: dyoung@redhat.com
    Cc: keescook@chromium.org
    Cc: zijun_hu
    Link: http://lkml.kernel.org/r/1492436099-4017-2-git-send-email-bhe@redhat.com
    Signed-off-by: Ingo Molnar

    Baoquan He
     

10 Nov, 2015

1 commit


07 Nov, 2015

1 commit

  • Change the param_free_charp() function from static to exported.

    It is used by zswap in the next patch ("zswap: use charp for zswap param
    strings").

    Signed-off-by: Dan Streetman
    Acked-by: Rusty Russell
    Cc: Seth Jennings
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dan Streetman
     

26 Aug, 2015

1 commit

  • parse_args() just aborts after it hits an error, so other args
    at the same initcall level are simply ignored. This can lead to
    other hard-to-understand problems, for example my testing machine
    panics during the boot if I pass "locktorture.verbose=true".

    Change parse_args() to save the err code for return and continue.

    Signed-off-by: Oleg Nesterov
    Signed-off-by: Rusty Russell

    Oleg Nesterov
     

02 Jul, 2015

1 commit

  • Pull module updates from Rusty Russell:
    "Main excitement here is Peter Zijlstra's lockless rbtree optimization
    to speed module address lookup. He found some abusers of the module
    lock doing that too.

    A little bit of parameter work here too; including Dan Streetman's
    breaking up the big param mutex so writing a parameter can load
    another module (yeah, really). Unfortunately that broke the usual
    suspects, !CONFIG_MODULES and !CONFIG_SYSFS, so those fixes were
    appended too"

    * tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: (26 commits)
    modules: only use mod->param_lock if CONFIG_MODULES
    param: fix module param locks when !CONFIG_SYSFS.
    rcu: merge fix for Convert ACCESS_ONCE() to READ_ONCE() and WRITE_ONCE()
    module: add per-module param_lock
    module: make perm const
    params: suppress unused variable error, warn once just in case code changes.
    modules: clarify CONFIG_MODULE_COMPRESS help, suggest 'N'.
    kernel/module.c: avoid ifdefs for sig_enforce declaration
    kernel/workqueue.c: remove ifdefs over wq_power_efficient
    kernel/params.c: export param_ops_bool_enable_only
    kernel/params.c: generalize bool_enable_only
    kernel/module.c: use generic module param operaters for sig_enforce
    kernel/params: constify struct kernel_param_ops uses
    sysfs: tightened sysfs permission checks
    module: Rework module_addr_{min,max}
    module: Use __module_address() for module_address_lookup()
    module: Make the mod_tree stuff conditional on PERF_EVENTS || TRACING
    module: Optimize __module_address() using a latched RB-tree
    rbtree: Implement generic latch_tree
    seqlock: Introduce raw_read_seqcount_latch()
    ...

    Linus Torvalds
     

28 Jun, 2015

2 commits


23 Jun, 2015

3 commits

  • Add a "param_lock" mutex to each module, and update params.c to use
    the correct built-in or module mutex while locking kernel params.
    Remove the kparam_block_sysfs_r/w() macros, replace them with direct
    calls to kernel_param_[un]lock(module).

    The kernel param code currently uses a single mutex to protect
    modification of any and all kernel params. While this generally works,
    there is one specific problem with it; a module callback function
    cannot safely load another module, i.e. with request_module() or even
    with indirect calls such as crypto_has_alg(). If the module to be
    loaded has any of its params configured (e.g. with a /etc/modprobe.d/*
    config file), then the attempt will result in a deadlock between the
    first module param callback waiting for modprobe, and modprobe trying to
    lock the single kernel param mutex to set the new module's param.

    This fixes that by using per-module mutexes, so that each individual module
    is protected against concurrent changes in its own kernel params, but is
    not blocked by changes to other module params. All built-in modules
    continue to use the built-in mutex, since they will always be loaded at
    runtime and references (e.g. request_module(), crypto_has_alg()) to them
    will never cause load-time param changing.

    This also simplifies the interface used by modules to block sysfs access
    to their params; while there are currently functions to block and unblock
    sysfs param access which are split up by read and write and expect a single
    kernel param to be passed, their actual operation is identical and applies
    to all params, not just the one passed to them; they simply lock and unlock
    the global param mutex. They are replaced with direct calls to
    kernel_param_[un]lock(THIS_MODULE), which locks THIS_MODULE's param_lock, or
    if the module is built-in, it locks the built-in mutex.

    Suggested-by: Rusty Russell
    Signed-off-by: Dan Streetman
    Signed-off-by: Rusty Russell

    Dan Streetman
     
  • Change the struct kernel_param.perm field to a const, as it should never
    be changed.

    Signed-off-by: Dan Streetman
    Signed-off-by: Rusty Russell (cut from larger patch)

    Dan Streetman
     
  • It shouldn't fail due to OOM (it's boot time), and already warns if we
    get two identical names. But you never know what the future holds, and
    WARN_ON_ONCE() keeps gcc happy with minimal code.

    Reported-by: Louis Langholtz
    Acked-by: Tejun Heo
    Signed-off-by: Rusty Russell

    Rusty Russell
     

28 May, 2015

3 commits

  • This will grant access to this helper to code built as modules.

    Cc: Rusty Russell
    Cc: David Howells
    Cc: Ming Lei
    Cc: Seth Forshee
    Cc: Kyle McMartin
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: Rusty Russell

    Luis R. Rodriguez
     
  • This takes out the bool_enable_only implementation from
    the module loading code and generalizes it so that others
    can make use of it.

    Cc: Rusty Russell
    Cc: Jani Nikula
    Cc: Andrew Morton
    Cc: Kees Cook
    Cc: Tejun Heo
    Cc: Ingo Molnar
    Cc: linux-kernel@vger.kernel.org
    Cc: cocci@systeme.lip6.fr
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: Rusty Russell

    Luis R. Rodriguez
     
  • Most code already uses consts for the struct kernel_param_ops,
    sweep the kernel for the last offending stragglers. Other than
    include/linux/moduleparam.h and kernel/params.c all other changes
    were generated with the following Coccinelle SmPL patch. Merge
    conflicts between trees can be handled with Coccinelle.

    In the future git could get Coccinelle merge support to deal with
    patch --> fail --> grammar --> Coccinelle --> new patch conflicts
    automatically for us on patches where the grammar is available and
    the patch is of high confidence. Consider this a feature request.

    Test compiled on x86_64 against:

    * allnoconfig
    * allmodconfig
    * allyesconfig

    @ const_found @
    identifier ops;
    @@

    const struct kernel_param_ops ops = {
    };

    @ const_not_found depends on !const_found @
    identifier ops;
    @@

    -struct kernel_param_ops ops = {
    +const struct kernel_param_ops ops = {
    };

    Generated-by: Coccinelle SmPL
    Cc: Rusty Russell
    Cc: Junio C Hamano
    Cc: Andrew Morton
    Cc: Kees Cook
    Cc: Tejun Heo
    Cc: Ingo Molnar
    Cc: cocci@systeme.lip6.fr
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: Rusty Russell

    Luis R. Rodriguez
     

20 May, 2015

1 commit

  • This adds an extra argument onto parse_params() to be used
    as a way to make the unused callback a bit more useful and
    generic by allowing the caller to pass on a data structure
    of its choice. An example use case is to allow us to easily
    make module parameters for every module which we will do
    next.

    @ parse @
    identifier name, args, params, num, level_min, level_max;
    identifier unknown, param, val, doing;
    type s16;
    @@
    extern char *parse_args(const char *name,
    char *args,
    const struct kernel_param *params,
    unsigned num,
    s16 level_min,
    s16 level_max,
    + void *arg,
    int (*unknown)(char *param, char *val,
    const char *doing
    + , void *arg
    ));

    @ parse_mod @
    identifier name, args, params, num, level_min, level_max;
    identifier unknown, param, val, doing;
    type s16;
    @@
    char *parse_args(const char *name,
    char *args,
    const struct kernel_param *params,
    unsigned num,
    s16 level_min,
    s16 level_max,
    + void *arg,
    int (*unknown)(char *param, char *val,
    const char *doing
    + , void *arg
    ))
    {
    ...
    }

    @ parse_args_found @
    expression R, E1, E2, E3, E4, E5, E6;
    identifier func;
    @@

    (
    R =
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    func);
    |
    R =
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    &func);
    |
    R =
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    NULL);
    |
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    func);
    |
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    &func);
    |
    parse_args(E1, E2, E3, E4, E5, E6,
    + NULL,
    NULL);
    )

    @ parse_args_unused depends on parse_args_found @
    identifier parse_args_found.func;
    @@

    int func(char *param, char *val, const char *unused
    + , void *arg
    )
    {
    ...
    }

    @ mod_unused depends on parse_args_found @
    identifier parse_args_found.func;
    expression A1, A2, A3;
    @@

    - func(A1, A2, A3);
    + func(A1, A2, A3, NULL);

    Generated-by: Coccinelle SmPL
    Cc: cocci@systeme.lip6.fr
    Cc: Tejun Heo
    Cc: Arjan van de Ven
    Cc: Greg Kroah-Hartman
    Cc: Rusty Russell
    Cc: Christoph Hellwig
    Cc: Felipe Contreras
    Cc: Ewan Milne
    Cc: Jean Delvare
    Cc: Hannes Reinecke
    Cc: Jani Nikula
    Cc: linux-kernel@vger.kernel.org
    Reviewed-by: Tejun Heo
    Acked-by: Rusty Russell
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: Greg Kroah-Hartman

    Luis R. Rodriguez
     

15 Apr, 2015

1 commit


20 Jan, 2015

1 commit


23 Dec, 2014

1 commit


18 Dec, 2014

1 commit

  • When a module_param is defined without DAC write permissions, it can
    still be changed at runtime and updated. Drivers using a 0444 permission
    may be surprised that these values can still be changed.

    For drivers that want to allow updates, any S_IW* flag will set the
    "store" function as before. Drivers without S_IW* flags will have the
    "store" function unset, unforcing a read-only value. Drivers that wish
    neither "store" nor "get" can continue to use "0" for perms to stay out
    of sysfs entirely.

    Old behavior:
    # cd /sys/module/snd/parameters
    # ls -l
    total 0
    -r--r--r-- 1 root root 4096 Dec 11 13:55 cards_limit
    -r--r--r-- 1 root root 4096 Dec 11 13:55 major
    -r--r--r-- 1 root root 4096 Dec 11 13:55 slots
    # cat major
    116
    # echo -1 > major
    -bash: major: Permission denied
    # chmod u+w major
    # echo -1 > major
    # cat major
    -1

    New behavior:
    ...
    # chmod u+w major
    # echo -1 > major
    -bash: echo: write error: Input/output error

    Signed-off-by: Kees Cook
    Signed-off-by: Rusty Russell

    Kees Cook
     

11 Nov, 2014

1 commit

  • commit 63662139e519ce06090b2759cf4a1d291b9cc0e2 attempted to patch a
    leak (which would only happen on OOM, ie. never), but it didn't quite
    work.

    This rewrites the code to be as simple as possible. add_sysfs_param()
    adds a parameter. If it fails, it's the caller's responsibility to
    clean up the parameters which already exist.

    The kzalloc-then-always-krealloc pattern is perhaps overly simplistic,
    but this code has clearly confused people. It worked on me...

    Signed-off-by: Rusty Russell

    Rusty Russell
     

14 Oct, 2014

1 commit


27 Aug, 2014

3 commits


18 Jul, 2014

1 commit

  • Some driver might want to pass in an 64-bit value, so introduce
    a module param type 'ullong'.

    Signed-off-by: Hannes Reinecke
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Ewan Milne
    Acked-by: Rusty Russell
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     

28 Apr, 2014

1 commit

  • The kernel passes any args it doesn't need through to init, except it
    assumes anything containing '.' belongs to the kernel (for a module).
    This change means all users can clearly distinguish which arguments
    are for init.

    For example, the kernel uses debug ("dee-bug") to mean log everything to
    the console, where systemd uses the debug from the Scandinavian "day-boog"
    meaning "fail to boot". If a future versions uses argv[] instead of
    reading /proc/cmdline, this confusion will be avoided.

    eg: test 'FOO="this is --foo"' -- 'systemd.debug="true true true"'

    Gives:
    argv[0] = '/debug-init'
    argv[1] = 'test'
    argv[2] = 'systemd.debug=true true true'
    envp[0] = 'HOME=/'
    envp[1] = 'TERM=linux'
    envp[2] = 'FOO=this is --foo'

    Signed-off-by: Rusty Russell

    Rusty Russell
     

04 Dec, 2013

1 commit


29 Sep, 2013

1 commit


13 Sep, 2013

1 commit


03 Sep, 2013

1 commit

  • 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: [] 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:[] [] 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] [] kobject_del+0x2e/0x40
    [ 1845.185026] [] kobject_delayed_cleanup+0x6e/0x1d0
    [ 1845.185026] [] process_one_work+0x1e5/0x670
    [ 1845.185026] [] ? process_one_work+0x183/0x670
    [ 1845.185026] [] worker_thread+0x113/0x370
    [ 1845.185026] [] ? rescuer_thread+0x290/0x290
    [ 1845.185026] [] kthread+0xda/0xe0
    [ 1845.185026] [] ? _raw_spin_unlock_irq+0x30/0x60
    [ 1845.185026] [] ? kthread_create_on_node+0x130/0x130
    [ 1845.185026] [] ret_from_fork+0x7a/0xb0
    [ 1845.185026] [] ? 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 87 00 01 00 00 01 74 1e 48 8d 7b 38 83 6b 38 01 0f 94 c0 84
    [ 1845.185026] RIP [] kobject_put+0x11/0x60
    [ 1845.185026] RSP
    [ 1845.185026] CR2: ffffffffa01601d0
    [ 1845.185026] ---[ end trace 49a70afd109f5653 ]---

    Signed-off-by: Li Zhong
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Rusty Russell

    Li Zhong
     

20 Aug, 2013

1 commit