diff --git a/fs/exec.c b/fs/exec.c index 9ea3a775d51e..ba12b4c466f6 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1074,7 +1074,7 @@ static int unshare_sighand(struct task_struct *me) */ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec) { - size_t len = min(strlen(buf), sizeof(tsk->comm) - 1); + size_t len = strnlen(buf, sizeof(tsk->comm) - 1); trace_task_rename(tsk, buf); memcpy(tsk->comm, buf, len); diff --git a/include/linux/sched.h b/include/linux/sched.h index ffb2ad9716f0..54820a427014 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1163,12 +1163,9 @@ struct task_struct { /* * executable name, excluding path. * - * - normally initialized begin_new_exec() - * - set it with set_task_comm() - * - strscpy_pad() to ensure it is always NUL-terminated and - * zero-padded - * - task_lock() to ensure the operation is atomic and the name is - * fully updated. + * - normally initialized by begin_new_exec() + * - set it with set_task_comm() to ensure it is always + * NUL-terminated and zero-padded */ char comm[TASK_COMM_LEN];