[PATCH] um: restore process name
Benjamin Berg
benjamin at sipsolutions.net
Wed Oct 23 00:19:44 PDT 2024
Hi,
I just noticed that this is not completely correct. readlink() does not
append a NULL byte, so you'll probably want to make the buffer one byte
longer and either initialize it or set buf[ret] = '\0' (after the
truncation check).
Benjamin
On Thu, 2024-10-10 at 16:14 +0200, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg at intel.com>
>
> After the execve() to disable ASLR, comm is now "exe",
> which is a bit confusing. Use readlink() to get this
> to the right name again.
>
> Disable stack frame size warnings on main.o since it's
> part of the initial userspace and can use larger stack.
>
> Fixes: 68b9883cc16e ("um: Discover host_task_size from envp")
> Signed-off-by: Johannes Berg <johannes.berg at intel.com>
> ---
> arch/um/os-Linux/Makefile | 2 ++
> arch/um/os-Linux/main.c | 14 ++++++++++++--
> 2 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/arch/um/os-Linux/Makefile b/arch/um/os-Linux/Makefile
> index 544e0b344c75..049dfa5bc9c6 100644
> --- a/arch/um/os-Linux/Makefile
> +++ b/arch/um/os-Linux/Makefile
> @@ -12,6 +12,8 @@ obj-y = execvp.o file.o helper.o irq.o main.o mem.o
> process.o \
>
> CFLAGS_signal.o += -Wframe-larger-than=4096
>
> +CFLAGS_main.o += -Wno-frame-larger-than
> +
> obj-$(CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA) += elf_aux.o
>
> USER_OBJS := $(user-objs-y) elf_aux.o execvp.o file.o helper.o irq.o
> \
> diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c
> index 8a52c49c5361..31dba0912a19 100644
> --- a/arch/um/os-Linux/main.c
> +++ b/arch/um/os-Linux/main.c
> @@ -10,6 +10,7 @@
> #include <errno.h>
> #include <signal.h>
> #include <string.h>
> +#include <limits.h>
> #include <sys/resource.h>
> #include <sys/personality.h>
> #include <as-layout.h>
> @@ -112,8 +113,17 @@ int __init main(int argc, char **argv, char
> **envp)
> /* Disable randomization and re-exec if it was changed
> successfully */
> ret = personality(PER_LINUX | ADDR_NO_RANDOMIZE);
> if (ret >= 0 && (ret & (PER_LINUX | ADDR_NO_RANDOMIZE)) !=
> - (PER_LINUX | ADDR_NO_RANDOMIZE))
> - execve("/proc/self/exe", argv, envp);
> + (PER_LINUX | ADDR_NO_RANDOMIZE)) {
> + char buf[PATH_MAX];
> + ssize_t ret;
> +
> + ret = readlink("/proc/self/exe", buf, sizeof(buf));
> + if (ret < 0 || ret >= sizeof(buf)) {
> + perror("readlink failure");
> + exit(1);
> + }
> + execve(buf, argv, envp);
> + }
>
> set_stklim();
>
More information about the linux-um
mailing list