lkml.org 
[lkml]   [2006]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 3/5 -mm] fault-injection: Clamp debugfs stacktrace-depth to MAX_STACK_TRACE_DEPTH
    From
    Date
    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 <dwm@meer.net>
    Cc: Akinobu Mita <akinobu.mita@gmail.com>
    ---
    lib/fault-inject.c | 27 +++++++++++++++++++++++----
    1 file changed, 23 insertions(+), 4 deletions(-)

    Index: linux-2.6.18/lib/fault-inject.c
    ===================================================================
    --- linux-2.6.18.orig/lib/fault-inject.c
    +++ linux-2.6.18/lib/fault-inject.c
    @@ -53,6 +53,8 @@ static bool fail_task(struct fault_attr
    return !in_interrupt() && task->make_it_fail;
    }

    +#define MAX_STACK_TRACE_DEPTH 32
    +
    #ifdef CONFIG_STACK_UNWIND

    static asmlinkage int fail_stacktrace_callback(struct unwind_frame_info *info,
    @@ -98,8 +100,7 @@ static bool fail_stacktrace(struct fault

    trace.nr_entries = 0;
    trace.entries = entries;
    - trace.max_entries = (depth < MAX_STACK_TRACE_DEPTH) ?
    - depth : MAX_STACK_TRACE_DEPTH;
    + trace.max_entries = depth;
    trace.skip = 1;
    trace.all_contexts = 0;

    @@ -179,6 +180,13 @@ static void debugfs_ul_set(void *data, u
    *(unsigned long *)data = val;
    }

    +static void debugfs_ul_set_MAX_STACK_TRACE_DEPTH(void *data, u64 val)
    +{
    + *(unsigned long *)data =
    + val < MAX_STACK_TRACE_DEPTH ?
    + val : MAX_STACK_TRACE_DEPTH;
    +}
    +
    static u64 debugfs_ul_get(void *data)
    {
    return *(unsigned long *)data;
    @@ -192,6 +200,17 @@ static struct dentry *debugfs_create_ul(
    return debugfs_create_file(name, mode, parent, value, &fops_ul);
    }

    +DEFINE_SIMPLE_ATTRIBUTE(fops_ul_MAX_STACK_TRACE_DEPTH, debugfs_ul_get,
    + debugfs_ul_set_MAX_STACK_TRACE_DEPTH, "%llu\n");
    +
    +static struct dentry *debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
    + const char *name, mode_t mode,
    + struct dentry *parent, unsigned long *value)
    +{
    + return debugfs_create_file(name, mode, parent, value,
    + &fops_ul_MAX_STACK_TRACE_DEPTH);
    +}
    +
    static void debugfs_atomic_t_set(void *data, u64 val)
    {
    atomic_set((atomic_t *)data, val);
    @@ -284,8 +303,8 @@ int init_fault_attr_dentries(struct faul
    mode, dir, &attr->task_filter);

    attr->dentries.stacktrace_depth_file =
    - debugfs_create_ul("stacktrace-depth", mode, dir,
    - &attr->stacktrace_depth);
    + debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
    + "stacktrace-depth", mode, dir, &attr->stacktrace_depth);

    attr->dentries.require_start_file =
    debugfs_create_ul("require-start", mode, dir, &attr->require_start);

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-12-07 09:17    [W:0.025 / U:156.604 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site