parisc: sigaltstack doesn't round ss.ss_sp as required
On 24-Nov-12, at 10:05 AM, John David Anglin wrote: > In trying to build the debian libsigsegv2 package, I found that sigaltstack > doesn't round ss.ss_sp. The tests intentionally pass an unaligned pointer. > This results in the two stack overflow tests failing. The attached patch fixes this issue. Signed-off-by: John David Anglin <dave.anglin@bell.net> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
		
					parent
					
						
							
								34360f080c
							
						
					
				
			
			
				commit
				
					
						ad30f3ff3d
					
				
			
		
					 1 changed files with 3 additions and 1 deletions
				
			
		|  | @ -190,8 +190,10 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size) | ||||||
| 	DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n", | 	DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n", | ||||||
| 			(unsigned long)ka, sp, frame_size); | 			(unsigned long)ka, sp, frame_size); | ||||||
| 	 | 	 | ||||||
|  | 	/* Align alternate stack and reserve 64 bytes for the signal
 | ||||||
|  | 	   handler's frame marker.  */ | ||||||
| 	if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp)) | 	if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp)) | ||||||
| 		sp = current->sas_ss_sp; /* Stacks grow up! */ | 		sp = (current->sas_ss_sp + 0x7f) & ~0x3f; /* Stacks grow up! */ | ||||||
| 
 | 
 | ||||||
| 	DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp); | 	DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp); | ||||||
| 	return (void __user *) sp; /* Stacks grow up.  Fun. */ | 	return (void __user *) sp; /* Stacks grow up.  Fun. */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 John David Anglin
				John David Anglin