Re: [PATCH v2 4/7] fs/binfmt_elf: replace open-coded string copy with get_task_comm
From: Yafang Shao <hidden>
Date: 2021-11-30 03:02:05
Also in:
bpf, linux-fsdevel, linux-mm, linux-perf-users, lkml
On Tue, Nov 30, 2021 at 12:01 AM Steven Rostedt [off-list ref] wrote:
On Sat, 20 Nov 2021 11:27:35 +0000 Yafang Shao [off-list ref] wrote:quoted
diff --git a/include/linux/elfcore-compat.h b/include/linux/elfcore-compat.h index e272c3d452ce..54feb64e9b5d 100644 --- a/include/linux/elfcore-compat.h +++ b/include/linux/elfcore-compat.h@@ -43,6 +43,11 @@ struct compat_elf_prpsinfo __compat_uid_t pr_uid; __compat_gid_t pr_gid; compat_pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* + * The hard-coded 16 is derived from TASK_COMM_LEN, but it can't be + * changed as it is exposed to userspace. We'd better make it hard-coded + * here.Didn't I once suggest having a macro called something like: TASK_COMM_LEN_16 ? https://lore.kernel.org/all/20211014221409.5da58a42@oasis.local.home/ (local)
Hi Steven, TASK_COMM_LEN_16 is a good idea, but not all hard-coded 16 can be replaced by this macro (which is defined in include/sched.h). For example, the comm[16] in include/uapi/linux/cn_proc.h can't be replaced as it is a uapi header which can't include linux/sched.h. That's why I prefer to keep the hard-coded 16 as-is. There are three options, - option 1 comment on all the hard-coded 16 to explain why it is hard-coded - option 2 replace the hard-coded 16 that can be replaced and comment on the others which can't be replaced. - option 3 replace the hard-coded 16 that can be replaced and specifically define TASK_COMM_LEN_16 in other files which can't include linux/sched.h. Which one do you prefer ?
quoted
+ */ char pr_fname[16]; char pr_psargs[ELF_PRARGSZ]; };diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h index 957ebec35aad..746e081879a5 100644 --- a/include/linux/elfcore.h +++ b/include/linux/elfcore.h@@ -65,6 +65,11 @@ struct elf_prpsinfo __kernel_gid_t pr_gid; pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid; /* Lots missing */ + /* + * The hard-coded 16 is derived from TASK_COMM_LEN, but it can't be + * changed as it is exposed to userspace. We'd better make it hard-coded + * here. + */ char pr_fname[16]; /* filename of executable */ char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ };
-- Thanks Yafang