Using __get_task_comm() to read the task comm ensures that the name is
always NUL-terminated, regardless of the source string. This approach also
facilitates future extensions to the task comm.

Signed-off-by: Yafang Shao <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Masami Hiramatsu <[email protected]>
Cc: Mathieu Desnoyers <[email protected]>
---
 include/linux/tracepoint.h     |  4 ++--
 include/trace/events/block.h   | 10 +++++-----
 include/trace/events/oom.h     |  2 +-
 include/trace/events/osnoise.h |  2 +-
 include/trace/events/sched.h   | 27 ++++++++++++++-------------
 include/trace/events/signal.h  |  2 +-
 include/trace/events/task.h    |  4 ++--
 7 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index 689b6d71590e..6381824d8107 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -519,10 +519,10 @@ static inline struct tracepoint 
*tracepoint_ptr_deref(tracepoint_ptr_t *p)
  *     *
  *
  *     TP_fast_assign(
- *             memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
+ *             __get_task_comm(__entry->next_comm, TASK_COMM_LEN, next);
  *             __entry->prev_pid       = prev->pid;
  *             __entry->prev_prio      = prev->prio;
- *             memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
+ *             __get_task_comm(__entry->prev_comm, TASK_COMM_LEN, prev);
  *             __entry->next_pid       = next->pid;
  *             __entry->next_prio      = next->prio;
  *     ),
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index 0e128ad51460..6f8c5d0014e6 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -193,7 +193,7 @@ DECLARE_EVENT_CLASS(block_rq,
 
                blk_fill_rwbs(__entry->rwbs, rq->cmd_flags);
                __get_str(cmd)[0] = '\0';
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
        ),
 
        TP_printk("%d,%d %s %u (%s) %llu + %u [%s]",
@@ -328,7 +328,7 @@ DECLARE_EVENT_CLASS(block_bio,
                __entry->sector         = bio->bi_iter.bi_sector;
                __entry->nr_sector      = bio_sectors(bio);
                blk_fill_rwbs(__entry->rwbs, bio->bi_opf);
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
        ),
 
        TP_printk("%d,%d %s %llu + %u [%s]",
@@ -415,7 +415,7 @@ TRACE_EVENT(block_plug,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
        ),
 
        TP_printk("[%s]", __entry->comm)
@@ -434,7 +434,7 @@ DECLARE_EVENT_CLASS(block_unplug,
 
        TP_fast_assign(
                __entry->nr_rq = depth;
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
        ),
 
        TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
@@ -485,7 +485,7 @@ TRACE_EVENT(block_split,
                __entry->sector         = bio->bi_iter.bi_sector;
                __entry->new_sector     = new_sector;
                blk_fill_rwbs(__entry->rwbs, bio->bi_opf);
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
        ),
 
        TP_printk("%d,%d %s %llu / %llu [%s]",
diff --git a/include/trace/events/oom.h b/include/trace/events/oom.h
index b799f3bcba82..f29be9ebcd4d 100644
--- a/include/trace/events/oom.h
+++ b/include/trace/events/oom.h
@@ -23,7 +23,7 @@ TRACE_EVENT(oom_score_adj_update,
 
        TP_fast_assign(
                __entry->pid = task->pid;
-               memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, task);
                __entry->oom_score_adj = task->signal->oom_score_adj;
        ),
 
diff --git a/include/trace/events/osnoise.h b/include/trace/events/osnoise.h
index 82f741ec0f57..50f480655722 100644
--- a/include/trace/events/osnoise.h
+++ b/include/trace/events/osnoise.h
@@ -20,7 +20,7 @@ TRACE_EVENT(thread_noise,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, t);
                __entry->pid = t->pid;
                __entry->start = start;
                __entry->duration = duration;
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index 68973f650c26..2a9d7c62c58a 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -9,6 +9,7 @@
 #include <linux/sched/numa_balancing.h>
 #include <linux/tracepoint.h>
 #include <linux/binfmts.h>
+#include <linux/sched.h>
 
 /*
  * Tracepoint for calling kthread_stop, performed to end a kthread:
@@ -25,7 +26,7 @@ TRACE_EVENT(sched_kthread_stop,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, t);
                __entry->pid    = t->pid;
        ),
 
@@ -152,7 +153,7 @@ DECLARE_EVENT_CLASS(sched_wakeup_template,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, p);
                __entry->pid            = p->pid;
                __entry->prio           = p->prio; /* XXX SCHED_DEADLINE */
                __entry->target_cpu     = task_cpu(p);
@@ -239,11 +240,11 @@ TRACE_EVENT(sched_switch,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->next_comm, TASK_COMM_LEN, next);
                __entry->prev_pid       = prev->pid;
                __entry->prev_prio      = prev->prio;
                __entry->prev_state     = __trace_sched_switch_state(preempt, 
prev_state, prev);
-               memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->prev_comm, TASK_COMM_LEN, prev);
                __entry->next_pid       = next->pid;
                __entry->next_prio      = next->prio;
                /* XXX SCHED_DEADLINE */
@@ -286,7 +287,7 @@ TRACE_EVENT(sched_migrate_task,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, p);
                __entry->pid            = p->pid;
                __entry->prio           = p->prio; /* XXX SCHED_DEADLINE */
                __entry->orig_cpu       = task_cpu(p);
@@ -311,7 +312,7 @@ DECLARE_EVENT_CLASS(sched_process_template,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, p);
                __entry->pid            = p->pid;
                __entry->prio           = p->prio; /* XXX SCHED_DEADLINE */
        ),
@@ -357,7 +358,7 @@ TRACE_EVENT(sched_process_wait,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, current);
                __entry->pid            = pid_nr(pid);
                __entry->prio           = current->prio; /* XXX SCHED_DEADLINE 
*/
        ),
@@ -383,9 +384,9 @@ TRACE_EVENT(sched_process_fork,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->parent_comm, TASK_COMM_LEN, parent);
                __entry->parent_pid     = parent->pid;
-               memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->child_comm, TASK_COMM_LEN, child);
                __entry->child_pid      = child->pid;
        ),
 
@@ -481,7 +482,7 @@ DECLARE_EVENT_CLASS_SCHEDSTAT(sched_stat_template,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, tsk);
                __entry->pid    = tsk->pid;
                __entry->delay  = delay;
        ),
@@ -539,7 +540,7 @@ DECLARE_EVENT_CLASS(sched_stat_runtime,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, tsk);
                __entry->pid            = tsk->pid;
                __entry->runtime        = runtime;
        ),
@@ -571,7 +572,7 @@ TRACE_EVENT(sched_pi_setprio,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, tsk);
                __entry->pid            = tsk->pid;
                __entry->oldprio        = tsk->prio;
                __entry->newprio        = pi_task ?
@@ -596,7 +597,7 @@ TRACE_EVENT(sched_process_hang,
        ),
 
        TP_fast_assign(
-               memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, tsk);
                __entry->pid = tsk->pid;
        ),
 
diff --git a/include/trace/events/signal.h b/include/trace/events/signal.h
index 1db7e4b07c01..8f317a265392 100644
--- a/include/trace/events/signal.h
+++ b/include/trace/events/signal.h
@@ -67,7 +67,7 @@ TRACE_EVENT(signal_generate,
        TP_fast_assign(
                __entry->sig    = sig;
                TP_STORE_SIGINFO(__entry, info);
-               memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, task);
                __entry->pid    = task->pid;
                __entry->group  = group;
                __entry->result = result;
diff --git a/include/trace/events/task.h b/include/trace/events/task.h
index 47b527464d1a..77c14707460e 100644
--- a/include/trace/events/task.h
+++ b/include/trace/events/task.h
@@ -21,7 +21,7 @@ TRACE_EVENT(task_newtask,
 
        TP_fast_assign(
                __entry->pid = task->pid;
-               memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
+               __get_task_comm(__entry->comm, TASK_COMM_LEN, task);
                __entry->clone_flags = clone_flags;
                __entry->oom_score_adj = task->signal->oom_score_adj;
        ),
@@ -46,7 +46,7 @@ TRACE_EVENT(task_rename,
 
        TP_fast_assign(
                __entry->pid = task->pid;
-               memcpy(entry->oldcomm, task->comm, TASK_COMM_LEN);
+               __get_task_comm(entry->oldcomm, TASK_COMM_LEN, task);
                strscpy(entry->newcomm, comm, TASK_COMM_LEN);
                __entry->oom_score_adj = task->signal->oom_score_adj;
        ),
-- 
2.39.1


Reply via email to