11 Aug, 2017

1 commit

  • Commit 1203c8e6fb0a ("fault-inject: simplify access check for fail-nth")
    unintentionally broke a conditional statement in should_fail(). Any
    faults are not injected in the task context by the change when the
    systematic fault injection is not used.

    This change restores to the previous correct behaviour.

    Link: http://lkml.kernel.org/r/1501633700-3488-1-git-send-email-akinobu.mita@gmail.com
    Fixes: 1203c8e6fb0a ("fault-inject: simplify access check for fail-nth")
    Signed-off-by: Akinobu Mita
    Reported-by: Lu Fengqi
    Tested-by: Lu Fengqi
    Cc: Dmitry Vyukov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

15 Jul, 2017

1 commit

  • The fail-nth file is created with 0666 and the access is permitted if
    and only if the task is current.

    This file is owned by the currnet user. So we can create it with 0644
    and allow the owner to write it. This enables to watch the status of
    task->fail_nth from another processes.

    [akinobu.mita@gmail.com: don't convert unsigned type value as signed int]
    Link: http://lkml.kernel.org/r/1492444483-9239-1-git-send-email-akinobu.mita@gmail.com
    [akinobu.mita@gmail.com: avoid unwanted data race to task->fail_nth]
    Link: http://lkml.kernel.org/r/1499962492-8931-1-git-send-email-akinobu.mita@gmail.com
    Link: http://lkml.kernel.org/r/1491490561-10485-5-git-send-email-akinobu.mita@gmail.com
    Signed-off-by: Akinobu Mita
    Acked-by: Dmitry Vyukov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

13 Jul, 2017

1 commit

  • Add /proc/self/task//fail-nth file that allows failing
    0-th, 1-st, 2-nd and so on calls systematically.
    Excerpt from the added documentation:

    "Write to this file of integer N makes N-th call in the current task
    fail (N is 0-based). Read from this file returns a single char 'Y' or
    'N' that says if the fault setup with a previous write to this file
    was injected or not, and disables the fault if it wasn't yet injected.
    Note that this file enables all types of faults (slab, futex, etc).
    This setting takes precedence over all other generic settings like
    probability, interval, times, etc. But per-capability settings (e.g.
    fail_futex/ignore-private) take precedence over it. This feature is
    intended for systematic testing of faults in a single system call. See
    an example below"

    Why add a new setting:
    1. Existing settings are global rather than per-task.
    So parallel testing is not possible.
    2. attr->interval is close but it depends on attr->count
    which is non reset to 0, so interval does not work as expected.
    3. Trying to model this with existing settings requires manipulations
    of all of probability, interval, times, space, task-filter and
    unexposed count and per-task make-it-fail files.
    4. Existing settings are per-failure-type, and the set of failure
    types is potentially expanding.
    5. make-it-fail can't be changed by unprivileged user and aggressive
    stress testing better be done from an unprivileged user.
    Similarly, this would require opening the debugfs files to the
    unprivileged user, as he would need to reopen at least times file
    (not possible to pre-open before dropping privs).

    The proposed interface solves all of the above (see the example).

    We want to integrate this into syzkaller fuzzer. A prototype has found
    10 bugs in kernel in first day of usage:

    https://groups.google.com/forum/#!searchin/syzkaller/%22FAULT_INJECTION%22%7Csort:relevance

    I've made the current interface work with all types of our sandboxes.
    For setuid the secret sauce was prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) to
    make /proc entries non-root owned. So I am fine with the current
    version of the code.

    [akpm@linux-foundation.org: fix build]
    Link: http://lkml.kernel.org/r/20170328130128.101773-1-dvyukov@google.com
    Signed-off-by: Dmitry Vyukov
    Cc: Akinobu Mita
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitry Vyukov
     

09 May, 2017

1 commit

  • in_interrupt() also returns true when bh is disabled in task context.
    That's not what fail_task() wants to check. Use the new in_task()
    predicate that does the right thing.

    Link: http://lkml.kernel.org/r/20170321091805.140676-1-dvyukov@google.com
    Signed-off-by: Dmitry Vyukov
    Reviewed-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitry Vyukov
     

23 Oct, 2015

1 commit


14 Dec, 2014

1 commit

  • Current debug levels are not optimal. Especially if one want to provoke
    big numbers of faults(broken device simulator) then any verbose level will
    produce giant numbers of identical logging messages. Let's add ratelimit
    parameter for that purpose.

    Signed-off-by: Dmitry Monakhov
    Acked-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitry Monakhov
     

04 Jun, 2013

1 commit

  • debugfs currently lack the ability to create attributes
    that set/get atomic_t values.

    This patch adds support for this through a new
    debugfs_create_atomic_t() function.

    Signed-off-by: Seth Jennings
    Acked-by: Greg Kroah-Hartman
    Acked-by: Mel Gorman
    Acked-by: Rik van Riel
    Acked-by: Konrad Rzeszutek Wilk
    Signed-off-by: Greg Kroah-Hartman

    Seth Jennings
     

30 Apr, 2013

1 commit


21 Jun, 2012

1 commit


08 Mar, 2012

1 commit


04 Jan, 2012

1 commit


27 Oct, 2011

2 commits


04 Aug, 2011

1 commit

  • init_fault_attr_dentries() is used to export fault_attr via debugfs.
    But it can only export it in debugfs root directory.

    Per Forlin is working on mmc_fail_request which adds support to inject
    data errors after a completed host transfer in MMC subsystem.

    The fault_attr for mmc_fail_request should be defined per mmc host and
    export it in debugfs directory per mmc host like
    /sys/kernel/debug/mmc0/mmc_fail_request.

    init_fault_attr_dentries() doesn't help for mmc_fail_request. So this
    introduces fault_create_debugfs_attr() which is able to create a
    directory in the arbitrary directory and replace
    init_fault_attr_dentries().

    [akpm@linux-foundation.org: extraneous semicolon, per Randy]
    Signed-off-by: Akinobu Mita
    Tested-by: Per Forlin
    Cc: Jens Axboe
    Cc: Christoph Lameter
    Cc: Pekka Enberg
    Cc: Matt Mackall
    Cc: Randy Dunlap
    Cc: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

27 Jul, 2011

3 commits


12 Oct, 2009

1 commit


07 Jan, 2009

1 commit


09 Feb, 2008

1 commit

  • Sometimes simple attributes might need to return an error, e.g. for
    acquiring a mutex interruptibly. In fact we have that situation in
    spufs already which is the original user of the simple attributes. This
    patch merged the temporarily forked attributes in spufs back into the
    main ones and allows to return errors.

    [akpm@linux-foundation.org: build fix]
    Signed-off-by: Christoph Hellwig
    Cc:
    Cc: Arnd Bergmann
    Cc: Greg KH
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     

25 Jul, 2007

1 commit


09 May, 2007

1 commit

  • Simplify the stacktrace code:

    - remove the unused task argument to save_stack_trace, it's always
    current
    - remove the all_contexts flag, it's alwasy 0

    Signed-off-by: Christoph Hellwig
    Cc: Paul Mundt
    Cc: Ralf Baechle
    Cc: Martin Schwidefsky
    Cc: "David S. Miller"
    Cc: Andi Kleen
    Cc: Akinobu Mita
    Acked-by: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     

21 Feb, 2007

1 commit

  • There is no prompt for CONFIG_STACKTRACE, so FAULT_INJECTION cannot be
    selected without LOCKDEP enabled. (found by Paolo 'Blaisorblade'
    Giarrusso)

    In order to fix such broken Kconfig dependency, this patch splits up the
    stacktrace filter support for fault injection by new Kconfig option, which
    enables to use fault injection on the architecture which doesn't have
    general stacktrace support.

    Cc: "Paolo 'Blaisorblade' Giarrusso"
    Signed-off-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

16 Dec, 2006

1 commit

  • It has caused more problems than it ever really solved, and is
    apparently not getting cleaned up and fixed. We can put it back when
    it's stable and isn't likely to make warning or bug events worse.

    In the meantime, enable frame pointers for more readable stack traces.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

09 Dec, 2006

6 commits

  • Trivial optimization and simplification of should_fail().

    Do cheaper disqualification tests first (performance gain not quantified).
    Simplify logic; eliminate goto.

    Signed-off-by: Don Mullis
    Cc: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Don Mullis
     
  • Clamp /debug/fail*/stacktrace-depth to MAX_STACK_TRACE_DEPTH. Ensures that a
    read of /debug/fail*/stacktrace-depth always returns a truthful answer.

    Signed-off-by: Don Mullis
    Cc: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Don Mullis
     
  • Use bool-true-false throughout.

    Signed-off-by: Don Mullis
    Cc: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Don Mullis
     
  • This patch provides stacktrace filtering feature.

    The stacktrace filter allows failing only for the caller you are
    interested in.

    For example someone may want to inject kmalloc() failures into
    only e100 module. they want to inject not only direct kmalloc() call,
    but also indirect allocation, too.

    - e100_poll --> netif_receive_skb --> packet_rcv_spkt --> skb_clone
    --> kmem_cache_alloc

    This patch enables to detect function calls like this by stacktrace
    and inject failures. The script Documentaion/fault-injection/failmodule.sh
    helps it.

    The range of text section of loaded e100 is expected to be
    [/sys/module/e100/sections/.text, /sys/module/e100/sections/.exit.text)

    So failmodule.sh stores these values into /debug/failslab/address-start
    and /debug/failslab/address-end. The maximum stacktrace depth is specified
    by /debug/failslab/stacktrace-depth.

    Please see the example that demonstrates how to inject slab allocation
    failures only for a specific module
    in Documentation/fault-injection/fault-injection.txt

    [dwm@meer.net: reject failure if any caller lies within specified range]
    Signed-off-by: Akinobu Mita
    Signed-off-by: Don Mullis
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     
  • This patch provides process filtering feature.
    The process filter allows failing only permitted processes
    by /proc//make-it-fail

    Please see the example that demostrates how to inject slab allocation
    failures into module init/cleanup code
    in Documentation/fault-injection/fault-injection.txt

    Signed-off-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     
  • This patch provides base functions implement to fault-injection
    capabilities.

    - The function should_fail() is taken from failmalloc-1.0
    (http://www.nongnu.org/failmalloc/)

    [akpm@osdl.org: cleanups, comments, add __init]
    Cc:
    Signed-off-by: Akinobu Mita
    Signed-off-by: Don Mullis
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita