mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	signal/mips: Document a conflict with SI_USER with SIGFPE
Setting si_code to __SI_FAULT results in a userspace seeing
an si_code of 0.  This is the same si_code as SI_USER.  Posix
and common sense requires that SI_USER not be a signal specific
si_code.  As such this use of 0 for the si_code is a pretty
horribly broken ABI.
This use of of __SI_FAULT is only a decade old.  Which compared
to the other pieces of kernel code that has made this mistake
is almost yesterday.
This is probably worth fixing but I don't know mips well enough
to know what si_code to would be the proper one to use.
Cc: Ralf Baechle <ralf@linux-mips.org>
Ref: 948a34cf39 ("[MIPS] Maintain si_code field properly for FP exceptions")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
			
			
This commit is contained in:
		
							parent
							
								
									cc9f72e474
								
							
						
					
					
						commit
						ea1b75cf91
					
				
					 2 changed files with 8 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -123,4 +123,11 @@ typedef struct siginfo {
 | 
			
		|||
#define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */
 | 
			
		||||
#define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SIGFPE si_codes
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
#define FPE_FIXME	(__SI_FAULT|0)	/* Broken dup of SI_USER */
 | 
			
		||||
#endif /* __KERNEL__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _UAPI_ASM_SIGINFO_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -735,7 +735,7 @@ void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
 | 
			
		|||
	else if (fcr31 & FPU_CSR_INE_X)
 | 
			
		||||
		si.si_code = FPE_FLTRES;
 | 
			
		||||
	else
 | 
			
		||||
		si.si_code = __SI_FAULT;
 | 
			
		||||
		si.si_code = FPE_FIXME;
 | 
			
		||||
	force_sig_info(SIGFPE, &si, tsk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue