]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
set_task_comm: kill the pointless memset() + wmb()
authorOleg Nesterov <oleg@redhat.com>
Wed, 20 Mar 2013 04:08:32 +0000 (15:08 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 22 Mar 2013 04:33:56 +0000 (15:33 +1100)
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>
fs/exec.c

index 87e731f020fbe2493cba43df1a275201793c6942..260f89f66651ec3124425a832dbf56bb8ea25df6 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1027,17 +1027,7 @@ EXPORT_SYMBOL_GPL(get_task_comm);
 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);