]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
coredump: Do not lock during 'comm' reporting
authorKees Cook <kees@kernel.org>
Sat, 28 Sep 2024 21:08:31 +0000 (14:08 -0700)
committerKees Cook <kees@kernel.org>
Thu, 31 Oct 2024 22:06:28 +0000 (15:06 -0700)
The 'comm' member will always be NUL terminated, and this is not
fast-path, so we can just perform a direct memcpy during a coredump
instead of potentially deadlocking while holding the task struct lock.

Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
Closes: https://lore.kernel.org/all/d122ece6-3606-49de-ae4d-8da88846bef2@oracle.com
Fixes: c114e9948c2b ("coredump: Standartize and fix logging")
Tested-by: Vegard Nossum <vegard.nossum@oracle.com>
Link: https://lore.kernel.org/r/20240928210830.work.307-kees@kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
include/linux/coredump.h

index 45e598fe34766ff5e4f8ac34def49250973b8e62..77e6e195d1d687aca412dd1d9b56ebd3c15139af 100644 (file)
@@ -52,8 +52,8 @@ extern void do_coredump(const kernel_siginfo_t *siginfo);
 #define __COREDUMP_PRINTK(Level, Format, ...) \
        do {    \
                char comm[TASK_COMM_LEN];       \
-       \
-               get_task_comm(comm, current);   \
+               /* This will always be NUL terminated. */ \
+               memcpy(comm, current->comm, sizeof(comm)); \
                printk_ratelimited(Level "coredump: %d(%*pE): " Format "\n",    \
                        task_tgid_vnr(current), (int)strlen(comm), comm, ##__VA_ARGS__);        \
        } while (0)     \