@@ -238,10 +238,10 @@ static int setup_return(struct pt_regs *regs, struct k_sigaction *ka,
238
238
return 0 ;
239
239
}
240
240
241
- static int setup_frame (int usig , struct k_sigaction * ka ,
242
- sigset_t * set , struct pt_regs * regs )
241
+ static int setup_frame (struct ksignal * ksig , sigset_t * set ,
242
+ struct pt_regs * regs )
243
243
{
244
- struct sigframe __user * frame = get_sigframe (ka , regs , sizeof (* frame ));
244
+ struct sigframe __user * frame = get_sigframe (& ksig -> ka , regs , sizeof (* frame ));
245
245
int err = 0 ;
246
246
247
247
if (!frame )
@@ -254,29 +254,29 @@ static int setup_frame(int usig, struct k_sigaction *ka,
254
254
255
255
err |= setup_sigframe (frame , regs , set );
256
256
if (err == 0 )
257
- err |= setup_return (regs , ka , frame -> retcode , frame , usig );
257
+ err |= setup_return (regs , & ksig -> ka , frame -> retcode , frame , usig );
258
258
259
259
return err ;
260
260
}
261
261
262
- static int setup_rt_frame (int usig , struct k_sigaction * ka , siginfo_t * info ,
263
- sigset_t * set , struct pt_regs * regs )
262
+ static int setup_rt_frame (struct ksignal * ksig , sigset_t * set ,
263
+ struct pt_regs * regs )
264
264
{
265
265
struct rt_sigframe __user * frame =
266
- get_sigframe (ka , regs , sizeof (* frame ));
266
+ get_sigframe (& ksig -> ka , regs , sizeof (* frame ));
267
267
int err = 0 ;
268
268
269
269
if (!frame )
270
270
return 1 ;
271
271
272
- err |= copy_siginfo_to_user (& frame -> info , info );
272
+ err |= copy_siginfo_to_user (& frame -> info , & ksig -> info );
273
273
274
274
err |= __put_user (0 , & frame -> sig .uc .uc_flags );
275
275
err |= __put_user (NULL , & frame -> sig .uc .uc_link );
276
276
err |= __save_altstack (& frame -> sig .uc .uc_stack , regs -> UCreg_sp );
277
277
err |= setup_sigframe (& frame -> sig , regs , set );
278
278
if (err == 0 )
279
- err |= setup_return (regs , ka , frame -> sig .retcode , frame , usig );
279
+ err |= setup_return (regs , & ksig -> ka , frame -> sig .retcode , frame , usig );
280
280
281
281
if (err == 0 ) {
282
282
/*
@@ -299,13 +299,13 @@ static inline void setup_syscall_restart(struct pt_regs *regs)
299
299
/*
300
300
* OK, we're invoking a handler
301
301
*/
302
- static void handle_signal (unsigned long sig , struct k_sigaction * ka ,
303
- siginfo_t * info , struct pt_regs * regs , int syscall )
302
+ static void handle_signal (struct ksignal * ksig , struct pt_regs * regs ,
303
+ int syscall )
304
304
{
305
305
struct thread_info * thread = current_thread_info ();
306
306
struct task_struct * tsk = current ;
307
307
sigset_t * oldset = sigmask_to_save ();
308
- int usig = sig ;
308
+ int usig = ksig -> sig ;
309
309
int ret ;
310
310
311
311
/*
@@ -318,7 +318,7 @@ static void handle_signal(unsigned long sig, struct k_sigaction *ka,
318
318
regs -> UCreg_00 = - EINTR ;
319
319
break ;
320
320
case - ERESTARTSYS :
321
- if (!(ka -> sa .sa_flags & SA_RESTART )) {
321
+ if (!(ksig -> ka . sa .sa_flags & SA_RESTART )) {
322
322
regs -> UCreg_00 = - EINTR ;
323
323
break ;
324
324
}
@@ -338,22 +338,17 @@ static void handle_signal(unsigned long sig, struct k_sigaction *ka,
338
338
/*
339
339
* Set up the stack frame
340
340
*/
341
- if (ka -> sa .sa_flags & SA_SIGINFO )
342
- ret = setup_rt_frame (usig , ka , info , oldset , regs );
341
+ if (ksig -> ka . sa .sa_flags & SA_SIGINFO )
342
+ ret = setup_rt_frame (ksig , oldset , regs );
343
343
else
344
- ret = setup_frame (usig , ka , oldset , regs );
344
+ ret = setup_frame (ksig , oldset , regs );
345
345
346
346
/*
347
347
* Check that the resulting registers are actually sane.
348
348
*/
349
349
ret |= !valid_user_regs (regs );
350
350
351
- if (ret != 0 ) {
352
- force_sigsegv (sig , tsk );
353
- return ;
354
- }
355
-
356
- signal_delivered (sig , info , ka , regs , 0 );
351
+ signal_setup_done (ret , ksig , 0 );
357
352
}
358
353
359
354
/*
@@ -367,9 +362,7 @@ static void handle_signal(unsigned long sig, struct k_sigaction *ka,
367
362
*/
368
363
static void do_signal (struct pt_regs * regs , int syscall )
369
364
{
370
- struct k_sigaction ka ;
371
- siginfo_t info ;
372
- int signr ;
365
+ struct ksignal ksig ;
373
366
374
367
/*
375
368
* We want the common case to go fast, which
@@ -380,9 +373,8 @@ static void do_signal(struct pt_regs *regs, int syscall)
380
373
if (!user_mode (regs ))
381
374
return ;
382
375
383
- signr = get_signal_to_deliver (& info , & ka , regs , NULL );
384
- if (signr > 0 ) {
385
- handle_signal (signr , & ka , & info , regs , syscall );
376
+ if (get_signsl (& ksig )) {
377
+ handle_signal (& ksig , regs , syscall );
386
378
return ;
387
379
}
388
380
0 commit comments