mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	signal/x86: In emulate_vsyscall force a signal instead of calling do_exit
Directly calling do_exit with a signal number has the problem that all of the side effects of the signal don't happen, such as killing all of the threads of a process instead of just the calling thread. So replace do_exit(SIGSYS) with force_fatal_sig(SIGSYS) which causes the signal handling to take it's normal path and work as expected. Cc: Andy Lutomirski <luto@kernel.org> Link: https://lkml.kernel.org/r/20211020174406.17889-17-ebiederm@xmission.com Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
		
							parent
							
								
									086ec444f8
								
							
						
					
					
						commit
						695dd0d634
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		| 
						 | 
					@ -226,7 +226,8 @@ bool emulate_vsyscall(unsigned long error_code,
 | 
				
			||||||
	if ((!tmp && regs->orig_ax != syscall_nr) || regs->ip != address) {
 | 
						if ((!tmp && regs->orig_ax != syscall_nr) || regs->ip != address) {
 | 
				
			||||||
		warn_bad_vsyscall(KERN_DEBUG, regs,
 | 
							warn_bad_vsyscall(KERN_DEBUG, regs,
 | 
				
			||||||
				  "seccomp tried to change syscall nr or ip");
 | 
									  "seccomp tried to change syscall nr or ip");
 | 
				
			||||||
		do_exit(SIGSYS);
 | 
							force_fatal_sig(SIGSYS);
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	regs->orig_ax = -1;
 | 
						regs->orig_ax = -1;
 | 
				
			||||||
	if (tmp)
 | 
						if (tmp)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue