|
@@ -191,8 +191,9 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
|
|
|
struct task_struct *me = current;
|
|
|
|
|
|
frame = (struct rt_sigframe __user *)
|
|
|
- round_down(stack_top - sizeof(struct rt_sigframe), 16) - 8;
|
|
|
- frame = (struct rt_sigframe __user *) ((unsigned long) frame - 128);
|
|
|
+ round_down(stack_top - sizeof(struct rt_sigframe), 16);
|
|
|
+ /* Subtract 128 for a red zone and 8 for proper alignment */
|
|
|
+ frame = (struct rt_sigframe __user *) ((unsigned long) frame - 128 - 8);
|
|
|
|
|
|
if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate)))
|
|
|
goto out;
|