forked from mirrors/linux
		
	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: 68b9883cc1 ("um: Discover host_task_size from envp")
Link: https://patch.msgid.link/20241010161411.c576e2aeb3e5.I244d4f34b8a8555ee5bec0e1cf5027bce4cc491b@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
			
			
This commit is contained in:
		
							parent
							
								
									14d4a7b516
								
							
						
					
					
						commit
						031acdcfb5
					
				
					 2 changed files with 14 additions and 2 deletions
				
			
		|  | @ -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 \
 | ||||
|  |  | |||
|  | @ -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(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Johannes Berg
						Johannes Berg