set_task_comm() does memset() + wmb() before strlcpy().  This buys
nothing and to add to the confusion, the comment is wrong.
- We do not need memset() to be "safe from non-terminating string
  reads", the final char is always zero and we never change it.
- wmb() is paired with nothing, it cannot prevent from printing
  the mixture of the old/new data unless the reader takes the lock.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: John Stultz <johnstul@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
 void set_task_comm(struct task_struct *tsk, char *buf)
 {
        task_lock(tsk);
-
        trace_task_rename(tsk, buf);
-
-       /*
-        * Threads may access current->comm without holding
-        * the task lock, so write the string carefully.
-        * Readers without a lock may see incomplete new
-        * names but are safe from non-terminating string reads.
-        */
-       memset(tsk->comm, 0, TASK_COMM_LEN);
-       wmb();
        strlcpy(tsk->comm, buf, sizeof(tsk->comm));
        task_unlock(tsk);
        perf_event_comm(tsk);