Messages in this thread Patch in this message | | | Date | Sat, 16 Mar 2013 21:24:11 +0100 | From | Oleg Nesterov <> | Subject | [PATCH 2/2] set_task_comm: kill the pointless memset() + wmb() |
| |
set_task_comm() does memset() + wmb() before strlcpy(). This buys nothing but adds 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 can't not prevent from printing the mixture of the old/new data unless the reader takes the lock.
Signed-off-by: Oleg Nesterov <oleg@redhat.com> --- fs/exec.c | 10 ---------- 1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/fs/exec.c b/fs/exec.c index bea2f7d..b270844 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1030,17 +1030,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); -- 1.5.5.1
| |