lkml.org 
[lkml]   [2021]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 51/64] tracing: Use struct_group() to zero struct trace_iterator
    Date
    In preparation for FORTIFY_SOURCE performing compile-time and run-time
    field bounds checking for memset(), avoid intentionally writing across
    neighboring fields.

    Add struct_group() to mark region of struct trace_iterator that should
    be initialized to zero.

    Signed-off-by: Kees Cook <keescook@chromium.org>
    ---
    include/linux/trace_events.h | 26 ++++++++++++++------------
    kernel/trace/trace.c | 4 +---
    2 files changed, 15 insertions(+), 15 deletions(-)

    diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
    index ad413b382a3c..cadad77fe524 100644
    --- a/include/linux/trace_events.h
    +++ b/include/linux/trace_events.h
    @@ -101,18 +101,20 @@ struct trace_iterator {
    bool snapshot;

    /* The below is zeroed out in pipe_read */
    - struct trace_seq seq;
    - struct trace_entry *ent;
    - unsigned long lost_events;
    - int leftover;
    - int ent_size;
    - int cpu;
    - u64 ts;
    -
    - loff_t pos;
    - long idx;
    -
    - /* All new field here will be zeroed out in pipe_read */
    + struct_group(init,
    + struct trace_seq seq;
    + struct trace_entry *ent;
    + unsigned long lost_events;
    + int leftover;
    + int ent_size;
    + int cpu;
    + u64 ts;
    +
    + loff_t pos;
    + long idx;
    +
    + /* All new field here will be zeroed out in pipe_read */
    + );
    };

    enum trace_iter_flags {
    diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
    index c59dd35a6da5..9f83864b0be6 100644
    --- a/kernel/trace/trace.c
    +++ b/kernel/trace/trace.c
    @@ -6691,9 +6691,7 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
    cnt = PAGE_SIZE - 1;

    /* reset all but tr, trace, and overruns */
    - memset(&iter->seq, 0,
    - sizeof(struct trace_iterator) -
    - offsetof(struct trace_iterator, seq));
    + memset(&iter->init, 0, sizeof(iter->init));
    cpumask_clear(iter->started);
    trace_seq_init(&iter->seq);
    iter->pos = -1;
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-27 23:17    [W:6.392 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site