X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=kernel%2Fsignal.c;h=214a8feeb77124c69b976d3021044953d212fd8b;hb=441398d378f29a5ad6d0fcda07918e54e4961800;hp=13f9def8b24aecf662dd12095e1d505e909785e4;hpb=b899ba7d8c71e2e1c2be281222877c7a1c2ba60d;p=linux-2.6-block.git diff --git a/kernel/signal.c b/kernel/signal.c index 13f9def8b24a..214a8feeb771 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3239,10 +3239,17 @@ int compat_restore_altstack(const compat_stack_t __user *uss) int __compat_save_altstack(compat_stack_t __user *uss, unsigned long sp) { + int err; struct task_struct *t = current; - return __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), &uss->ss_sp) | - __put_user(sas_ss_flags(sp), &uss->ss_flags) | + err = __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), + &uss->ss_sp) | + __put_user(t->sas_ss_flags, &uss->ss_flags) | __put_user(t->sas_ss_size, &uss->ss_size); + if (err) + return err; + if (t->sas_ss_flags & SS_AUTODISARM) + sas_ss_reset(t); + return 0; } #endif