[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