Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1323347

Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas within sighandler

From Stas Sergeev <stsp@list.ru>
Newsgroups linux.kernel
Subject Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas within sighandler
Date 2016-02-01 18:30 +0100
Message-ID <qXqsz-6bL-33@gated-at.bofh.it> (permalink)
References <qX2Tf-5OH-3@gated-at.bofh.it> <qX32W-5Tv-11@gated-at.bofh.it> <qXpd9-5p0-41@gated-at.bofh.it> <qXqiT-66P-25@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


01.02.2016 20:09, Oleg Nesterov пишет:
> On 02/01, Oleg Nesterov wrote:
>>> +        onsigstack = on_sig_stack(sp);
>>> +        if (ss_size == 0) {
>>> +            switch (ss_flags) {
>>> +            case 0:
>>> +                error = -EPERM;
>>> +                if (onsigstack)
>>> +                    goto out;
>>> +                current->sas_ss_sp = 0;
>>> +                current->sas_ss_size = 0;
>>> +                current->sas_ss_flags = SS_DISABLE;
>>> +                break;
>>> +            case SS_ONSTACK:
>>> +                /* re-enable previously disabled sas */
>>> +                error = -EINVAL;
>>> +                if (current->sas_ss_size == 0)
>>> +                    goto out;
>>> +                break;
>>> +            default:
>>> +                break;
>>> +            }
>> and iiuc the "default" case allows you to write SS_DISABLE into ->sas_ss_flags
>> even if on_sig_stack().
>>
>> So the sequence is
>>
>> 	// running on alt stack
>>
>> 	sigaltstack(SS_DISABLE);
>>
>> 	temporary_run_on_another_stack();
>>
>> 	sigaltstack(SS_ONSTACK);
>>
>> and SS_DISABLE saves us from another SA_ONSTACK signal, right?
>>
>> But afaics it can only help after we change the stack. Suppose that SA_ONSTACK signal
>> comess before temporary_run_on_another_stack(). get_sigframe() should be fine after
>> your changes (afaics), it won't pick the alt stack after SS_DISABLE.
>>
>> However, unless I missed something save_altstack_ex() will record SS_ONSTACK in
>> uc_stack->ss_flags, and after return from signal handler restore_altstack() will
>> enable alt stack again?
> OK, I didn't notice you modified save_altstack_ex() to use ->sas_ss_flags instead
> of sas_ss_flags()... still doesn't look right, in this case restore_altstack() will
> not restore sas_ss_size/sas_ss_sp and they can be changed by signal handler.
How?
Trying to change them in a sighandler with sigaltstack()
will get EPERM. And if you change them in uc_stack without
setting ss_flags back to SS_ONSTACK, they should better be ignored.

> Anyway, whatever I missed I agree with Andy, SS_FORCE looks simpler and better to me.
But perhaps you missed the most important thing, that
it is not possible to change the altstack in sighandler - you'll
get EPERM, even with my patch. But with SS_FORCE this is
exactly not the case. So I'd like you to confirm your opinion
after all the implementation details are understood.
Also it would be interesting to know what do you think about
just removing the EPERM check instead of this all. There are
3 possibilities to choose from, not 2. Removing EPERM looks
simplest.

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/4] make sigaltstack() compatible with swapcontext() Stas Sergeev <stsp@list.ru> - 2016-01-31 17:20 +0100
  [PATCH 1/4] selftests: Add test for sigaltstack(SS_DISABLE) inside  sighandler Stas Sergeev <stsp@list.ru> - 2016-01-31 17:20 +0100
  [PATCH 2/4] score: signal: fix sigaltstack check Stas Sergeev <stsp@list.ru> - 2016-01-31 17:30 +0100
    Re: [PATCH 2/4] score: signal: fix sigaltstack check Lennox Wu <lennox.wu@gmail.com> - 2016-02-02 20:10 +0100
  [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas within  sighandler Stas Sergeev <stsp@list.ru> - 2016-01-31 17:30 +0100
    Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Andy Lutomirski <luto@amacapital.net> - 2016-01-31 18:10 +0100
      Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-01-31 18:40 +0100
        Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Andy Lutomirski <luto@amacapital.net> - 2016-01-31 20:10 +0100
          Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-01-31 21:00 +0100
            Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Andy Lutomirski <luto@amacapital.net> - 2016-01-31 21:20 +0100
              Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-01-31 23:40 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Andy Lutomirski <luto@amacapital.net> - 2016-01-31 23:50 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 00:50 +0100
    Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 17:10 +0100
      Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 18:00 +0100
        Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 18:30 +0100
      Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 18:20 +0100
        Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 18:30 +0100
          Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 19:10 +0100
            Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 19:20 +0100
              Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Andy Lutomirski <luto@amacapital.net> - 2016-02-01 19:30 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 19:50 +0100
              Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 20:00 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 20:10 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 20:30 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-01 20:50 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Oleg Nesterov <oleg@redhat.com> - 2016-02-01 21:50 +0100
                Re: [PATCH 4/4] sigaltstack: allow disabling and re-enabling sas  within sighandler Stas Sergeev <stsp@list.ru> - 2016-02-02 00:10 +0100
  [PATCH 3/4] x86: signal: unify the sigaltstack check with other  arches Stas Sergeev <stsp@list.ru> - 2016-01-31 17:30 +0100
    Re: [PATCH 3/4] x86: signal: unify the sigaltstack check with other arches Andy Lutomirski <luto@amacapital.net> - 2016-01-31 18:00 +0100
      Re: [PATCH 3/4] x86: signal: unify the sigaltstack check with other  arches Stas Sergeev <stsp@list.ru> - 2016-01-31 19:10 +0100

csiph-web