From 031acdcfb566ba18ffb57d51abf357a5e350424b Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Thu, 10 Oct 2024 16:14:12 +0200 Subject: [PATCH] um: restore process name 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") Link: https://patch.msgid.link/20241010161411.c576e2aeb3e5.I244d4f34b8a8555ee5bec0e1cf5027bce4cc491b@changeid Signed-off-by: Johannes Berg --- 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 544e0b344c754..049dfa5bc9c69 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 8a52c49c53615..5e0cba5aee931 100644 --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -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(); -- 2.50.1