tracing: Use strncpy instead of memcpy when copying comm in trace.c
authorTom Zanussi <tom.zanussi@linux.intel.com>
Tue, 5 Mar 2019 16:12:00 +0000 (10:12 -0600)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 5 Mar 2019 17:14:42 +0000 (12:14 -0500)
Because there may be random garbage beyond a string's null terminator,
code that might use the entire comm array e.g. histogram keys, can
give unexpected results if that garbage is copied in too, so avoid
that possibility by using strncpy instead of memcpy.

Link: http://lkml.kernel.org/r/1d6ebac26570c2a29ce9fb575379f17ef5c8b81b.1551802084.git.tom.zanussi@linux.intel.com
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.c

index 3835f7ed32937748c411d9d98d426d5ac2e74da7..e9cc47e59d25e6d60db9eae88bdbdfd21fc609e8 100644 (file)
@@ -1497,7 +1497,7 @@ __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
        max_data->critical_start = data->critical_start;
        max_data->critical_end = data->critical_end;
 
-       memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
+       strncpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
        max_data->pid = tsk->pid;
        /*
         * If tsk == current, then use current_uid(), as that does not use
@@ -1923,7 +1923,7 @@ static inline char *get_saved_cmdlines(int idx)
 
 static inline void set_cmdline(int idx, const char *cmdline)
 {
-       memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
+       strncpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
 }
 
 static int allocate_cmdlines_buffer(unsigned int val,