m32r: don't block signals if sigframe setup has failed

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Al Viro and committed by Linus Torvalds a05c4e1d a7481024

+13 -10
+13 -10
arch/m32r/kernel/signal.c
··· 187 return (void __user *)((sp - frame_size) & -8ul); 188 } 189 190 - static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, 191 sigset_t *set, struct pt_regs *regs) 192 { 193 struct rt_sigframe __user *frame; ··· 244 current->comm, current->pid, frame, regs->pc); 245 #endif 246 247 - return; 248 249 give_sigsegv: 250 force_sigsegv(sig, current); 251 } 252 253 /* 254 * OK, we're invoking a handler 255 */ 256 257 - static void 258 handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, 259 sigset_t *oldset, struct pt_regs *regs) 260 { ··· 288 } 289 290 /* Set up the stack frame */ 291 - setup_rt_frame(sig, ka, info, oldset, regs); 292 293 spin_lock_irq(&current->sighand->siglock); 294 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); ··· 297 sigaddset(&current->blocked,sig); 298 recalc_sigpending(); 299 spin_unlock_irq(&current->sighand->siglock); 300 } 301 302 /* ··· 305 * want to handle. Thus you cannot kill init even with a SIGKILL even by 306 * mistake. 307 */ 308 - static int do_signal(struct pt_regs *regs) 309 { 310 siginfo_t info; 311 int signr; ··· 320 * if so. 321 */ 322 if (!user_mode(regs)) 323 - return 1; 324 325 if (try_to_freeze()) 326 goto no_signal; ··· 339 */ 340 341 /* Whee! Actually deliver the signal. */ 342 - handle_signal(signr, &ka, &info, oldset, regs); 343 - clear_thread_flag(TIF_RESTORE_SIGMASK); 344 - return 1; 345 } 346 347 no_signal: ··· 374 clear_thread_flag(TIF_RESTORE_SIGMASK); 375 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL); 376 } 377 - return 0; 378 } 379 380 /*
··· 187 return (void __user *)((sp - frame_size) & -8ul); 188 } 189 190 + static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, 191 sigset_t *set, struct pt_regs *regs) 192 { 193 struct rt_sigframe __user *frame; ··· 244 current->comm, current->pid, frame, regs->pc); 245 #endif 246 247 + return 0; 248 249 give_sigsegv: 250 force_sigsegv(sig, current); 251 + return -EFAULT; 252 } 253 254 /* 255 * OK, we're invoking a handler 256 */ 257 258 + static int 259 handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, 260 sigset_t *oldset, struct pt_regs *regs) 261 { ··· 287 } 288 289 /* Set up the stack frame */ 290 + if (setup_rt_frame(sig, ka, info, oldset, regs)) 291 + return -EFAULT; 292 293 spin_lock_irq(&current->sighand->siglock); 294 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); ··· 295 sigaddset(&current->blocked,sig); 296 recalc_sigpending(); 297 spin_unlock_irq(&current->sighand->siglock); 298 + return 0; 299 } 300 301 /* ··· 302 * want to handle. Thus you cannot kill init even with a SIGKILL even by 303 * mistake. 304 */ 305 + static void do_signal(struct pt_regs *regs) 306 { 307 siginfo_t info; 308 int signr; ··· 317 * if so. 318 */ 319 if (!user_mode(regs)) 320 + return; 321 322 if (try_to_freeze()) 323 goto no_signal; ··· 336 */ 337 338 /* Whee! Actually deliver the signal. */ 339 + if (handle_signal(signr, &ka, &info, oldset, regs) == 0) 340 + clear_thread_flag(TIF_RESTORE_SIGMASK); 341 + 342 + return; 343 } 344 345 no_signal: ··· 370 clear_thread_flag(TIF_RESTORE_SIGMASK); 371 sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL); 372 } 373 } 374 375 /*