Using {memcpy,strncpy,strcpy,kstrdup} to copy the task comm relies on the
length of task comm. Changes in the task comm could result in a destination
string that is overflow. Therefore, we should explicitly ensure the
destination string is always NUL-terminated, regardless of the task comm.
This approach will facilitate future extensions to the task comm.As suggested by Linus [0], we can identify all relevant code with the following git grep command: git grep 'memcpy.*->comm\>' git grep 'kstrdup.*->comm\>' git grep 'strncpy.*->comm\>' git grep 'strcpy.*->comm\>' PATCH #2~#4: memcpy PATCH #5~#6: kstrdup PATCH #7: strcpy Please note that strncpy() is not included in this series as it is being tracked by another effort. [1] task_lock() is removed from get_task_comm() as it is unnecessary. Suggested-by: Linus Torvalds <[email protected]> Link: https://lore.kernel.org/all/CAHk-=wjAmmHUg6vho1KjzQi2=psr30+cogfd4axrthr2gsi...@mail.gmail.com/ [0] Changes: v8->v9: - Keep the BUILD_BUG_ON() in get_task_comm() (Kees) - Keep strscpy_pad() in get_task_comm() (Kees) - Replace more strcpy() with strscpy() in drivers/gpu/drm/i915/i915_gpu_error.c (Justin) - Fix typos and commit improvement in patch #5 (Andy) - Drop the change in net as it was fixed by b19f69a95830 ("net/ipv6: replace deprecated strcpy with strscpy") v7->v8: https://lore.kernel.org/all/[email protected]/ - Avoid '+1' and '-1' in string copy. (Alejandro) v6->v7: https://lore.kernel.org/all/[email protected]/ - Improve the comment (Alejandro) - Drop strncpy as it is being tracked by another effort (Justin) https://github.com/KSPP/linux/issues/90 [1] v5->v6: https://lore.kernel.org/linux-mm/[email protected]/ - Get rid of __get_task_comm() (Linus) - Use ARRAY_SIZE() in get_task_comm() (Alejandro) v4->v5: https://lore.kernel.org/all/[email protected]/ - Drop changes in the mm/kmemleak.c as it was fixed by commit 0b84780134fb ("mm/kmemleak: replace strncpy() with strscpy()") - Drop changes in kernel/tsacct.c as it was fixed by commit 0fe2356434e ("tsacct: replace strncpy() with strscpy()") v3->v4: https://lore.kernel.org/linux-mm/[email protected]/ - Rename __kstrndup() to __kmemdup_nul() and define it inside mm/util.c (Matthew) - Remove unused local variable (Simon) v2->v3: https://lore.kernel.org/all/[email protected]/ - Deduplicate code around kstrdup (Andrew) - Add commit log for dropping task_lock (Catalin) v1->v2: https://lore.kernel.org/bpf/[email protected]/ - Add comment for dropping task_lock() in __get_task_comm() (Alexei) - Drop changes in trace event (Steven) - Fix comment on task comm (Matus) v1: https://lore.kernel.org/all/[email protected]/ Yafang Shao (7): Get rid of __get_task_comm() auditsc: Replace memcpy() with strscpy() security: Replace memcpy() with get_task_comm() bpftool: Ensure task comm is always NUL-terminated mm/util: Fix possible race condition in kstrdup() mm/util: Deduplicate code in {kstrdup,kstrndup,kmemdup_nul} drm: Replace strcpy() with strscpy() drivers/gpu/drm/drm_framebuffer.c | 2 +- drivers/gpu/drm/i915/i915_gpu_error.c | 6 +-- fs/exec.c | 10 ----- fs/proc/array.c | 2 +- include/linux/sched.h | 28 +++++++++--- kernel/auditsc.c | 6 +-- kernel/kthread.c | 2 +- mm/util.c | 62 ++++++++++++--------------- security/lsm_audit.c | 4 +- security/selinux/selinuxfs.c | 2 +- tools/bpf/bpftool/pids.c | 2 + 11 files changed, 63 insertions(+), 63 deletions(-) -- 2.43.5
