From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stas Sergeev Subject: Re: [PATCH 1/2] sigaltstack: implement SS_AUTODISARM flag Date: Mon, 29 Feb 2016 09:29:26 +0300 Message-ID: <56D3E546.5010403@list.ru> References: <1456694000-16395-1-git-send-email-stsp@list.ru> <1456694000-16395-2-git-send-email-stsp@list.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: In-Reply-To: <1456694000-16395-2-git-send-email-stsp-cmBhpYW9OiY@public.gmane.org> Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: stsp-cmBhpYW9OiY@public.gmane.org Cc: Ingo Molnar , Peter Zijlstra , Richard Weinberger , Andrew Morton , Oleg Nesterov , Tejun Heo , Heinrich Schuchardt , Jason Low , Andrea Arcangeli , Frederic Weisbecker , Konstantin Khlebnikov , Josh Triplett , "Eric W. Biederman" , Aleksa Sarai , Amanieu d'Antras , Paul Moore , Sasha Levin , Palmer Dabbelt , Vladimir Davydov , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Andy Lutomirski , Stas Sergeev List-Id: linux-api@vger.kernel.org 29.02.2016 00:13, Stas Sergeev =D0=BF=D0=B8=D1=88=D0=B5=D1=82: > This patch implements the SS_AUTODISARM flag that can be ORed with > SS_ONSTACK when forming ss_flags. > When this flag is set, sigaltstack will be disabled when entering > the signal handler; more precisely, after saving sas to uc_stack. > When leaving the signal handler, the sigaltstack is restored by > uc_stack. > When this flag is used, it is safe to switch from sighandler with > swapcontext(). Without this flag, the subsequent signal will corrupt > the state of the switched-away sighandler. > > CC: Ingo Molnar > CC: Peter Zijlstra > CC: Richard Weinberger > CC: Andrew Morton > CC: Oleg Nesterov > CC: Tejun Heo > CC: Heinrich Schuchardt > CC: Jason Low > CC: Andrea Arcangeli > CC: Frederic Weisbecker > CC: Konstantin Khlebnikov > CC: Josh Triplett > CC: "Eric W. Biederman" > CC: Aleksa Sarai > CC: "Amanieu d'Antras" > CC: Paul Moore > CC: Sasha Levin > CC: Palmer Dabbelt > CC: Vladimir Davydov > CC: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > CC: linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > CC: Andy Lutomirski > > Signed-off-by: Stas Sergeev > --- > include/linux/sched.h | 1 + > include/linux/signal.h | 4 +++- > include/uapi/linux/signal.h | 3 +++ > kernel/fork.c | 4 +++- > kernel/signal.c | 23 ++++++++++++----------- > 5 files changed, 22 insertions(+), 13 deletions(-) > > diff --git a/include/linux/sched.h b/include/linux/sched.h > index a10494a..f561d34 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1587,6 +1587,7 @@ struct task_struct { > =20 > unsigned long sas_ss_sp; > size_t sas_ss_size; > + unsigned sas_ss_flags; > =20 > struct callback_head *task_works; > =20 > diff --git a/include/linux/signal.h b/include/linux/signal.h > index 92557bb..be3ebe0 100644 > --- a/include/linux/signal.h > +++ b/include/linux/signal.h > @@ -432,8 +432,10 @@ int __save_altstack(stack_t __user *, unsigned l= ong); > stack_t __user *__uss =3D uss; \ > struct task_struct *t =3D current; \ > put_user_ex((void __user *)t->sas_ss_sp, &__uss->ss_sp); \ > - put_user_ex(sas_ss_flags(sp), &__uss->ss_flags); \ > + put_user_ex(t->sas_ss_flags, &__uss->ss_flags); \ > put_user_ex(t->sas_ss_size, &__uss->ss_size); \ > + if (t->sas_ss_flags & SS_AUTODISARM) \ > + t->sas_ss_size =3D 0; \ Should also reset flags here... Will send v4. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751430AbcB2Gnx (ORCPT ); Mon, 29 Feb 2016 01:43:53 -0500 Received: from fallback8.mail.ru ([94.100.181.110]:46686 "EHLO fallback8.mail.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751119AbcB2Gnu (ORCPT ); Mon, 29 Feb 2016 01:43:50 -0500 Subject: Re: [PATCH 1/2] sigaltstack: implement SS_AUTODISARM flag Cc: Ingo Molnar , Peter Zijlstra , Richard Weinberger , Andrew Morton , Oleg Nesterov , Tejun Heo , Heinrich Schuchardt , Jason Low , Andrea Arcangeli , Frederic Weisbecker , Konstantin Khlebnikov , Josh Triplett , "Eric W. Biederman" , Aleksa Sarai , "Amanieu d'Antras" , Paul Moore , Sasha Levin , Palmer Dabbelt , Vladimir Davydov , linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, Andy Lutomirski , Stas Sergeev References: <1456694000-16395-1-git-send-email-stsp@list.ru> <1456694000-16395-2-git-send-email-stsp@list.ru> To: stsp@list.ru From: Stas Sergeev Message-ID: <56D3E546.5010403@list.ru> Date: Mon, 29 Feb 2016 09:29:26 +0300 User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <1456694000-16395-2-git-send-email-stsp@list.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Mras: Ok Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 29.02.2016 00:13, Stas Sergeev пишет: > This patch implements the SS_AUTODISARM flag that can be ORed with > SS_ONSTACK when forming ss_flags. > When this flag is set, sigaltstack will be disabled when entering > the signal handler; more precisely, after saving sas to uc_stack. > When leaving the signal handler, the sigaltstack is restored by > uc_stack. > When this flag is used, it is safe to switch from sighandler with > swapcontext(). Without this flag, the subsequent signal will corrupt > the state of the switched-away sighandler. > > CC: Ingo Molnar > CC: Peter Zijlstra > CC: Richard Weinberger > CC: Andrew Morton > CC: Oleg Nesterov > CC: Tejun Heo > CC: Heinrich Schuchardt > CC: Jason Low > CC: Andrea Arcangeli > CC: Frederic Weisbecker > CC: Konstantin Khlebnikov > CC: Josh Triplett > CC: "Eric W. Biederman" > CC: Aleksa Sarai > CC: "Amanieu d'Antras" > CC: Paul Moore > CC: Sasha Levin > CC: Palmer Dabbelt > CC: Vladimir Davydov > CC: linux-kernel@vger.kernel.org > CC: linux-api@vger.kernel.org > CC: Andy Lutomirski > > Signed-off-by: Stas Sergeev > --- > include/linux/sched.h | 1 + > include/linux/signal.h | 4 +++- > include/uapi/linux/signal.h | 3 +++ > kernel/fork.c | 4 +++- > kernel/signal.c | 23 ++++++++++++----------- > 5 files changed, 22 insertions(+), 13 deletions(-) > > diff --git a/include/linux/sched.h b/include/linux/sched.h > index a10494a..f561d34 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1587,6 +1587,7 @@ struct task_struct { > > unsigned long sas_ss_sp; > size_t sas_ss_size; > + unsigned sas_ss_flags; > > struct callback_head *task_works; > > diff --git a/include/linux/signal.h b/include/linux/signal.h > index 92557bb..be3ebe0 100644 > --- a/include/linux/signal.h > +++ b/include/linux/signal.h > @@ -432,8 +432,10 @@ int __save_altstack(stack_t __user *, unsigned long); > stack_t __user *__uss = uss; \ > struct task_struct *t = current; \ > put_user_ex((void __user *)t->sas_ss_sp, &__uss->ss_sp); \ > - put_user_ex(sas_ss_flags(sp), &__uss->ss_flags); \ > + put_user_ex(t->sas_ss_flags, &__uss->ss_flags); \ > put_user_ex(t->sas_ss_size, &__uss->ss_size); \ > + if (t->sas_ss_flags & SS_AUTODISARM) \ > + t->sas_ss_size = 0; \ Should also reset flags here... Will send v4.