From: "Gábor Melis" <mega@retes.hu>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>,
Davide Libenzi <davidel@xmailserver.org>,
Ingo Molnar <mingo@elte.hu>, Roland McGrath <roland@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Chris Friesen <cfriesen@nortel.com>,
linux-kernel@vger.kernel.org
Subject: Re: Q: SEGSEGV && uc_mcontext->ip (Was: Signal delivery order)
Date: Wed, 18 Mar 2009 10:58:22 +0100 [thread overview]
Message-ID: <200903181058.23247.mega@retes.hu> (raw)
In-Reply-To: <alpine.LFD.2.00.0903170848490.3082@localhost.localdomain>
On Martes 17 Marzo 2009, Linus Torvalds wrote:
> On Tue, 17 Mar 2009, Gábor Melis wrote:
> > As an application developer what I'd like to have is this:
> > synchronously generated signals are delivered before asynchronously
> > generated ones.
>
> I agree that it would be nice, but quite frankly, it's simply not how
> signals work. It would be a reasonably invasive change, and you
> wouldn't really be able to rely on it anyway since most kernels don't
> work that way.
True. I won't be able to rely on this and I'll stick to the SIGUSR2
workaround that's confirmed by Oleg.
> What you might be able to do instead is to walk signal frames
> backwards by hand. IOW, accept the fact that sometimes signals end up
> being nested, but then you could try to find the right frame by just
> looking at them.
Walking the frames is not enough, because even if the right one is
found, I can't put a new frame on it if it's not at the top ...
> And your trick of comparing 'info->si_ip' with
> 'context->uc_mcontext->ip' is pretty good, and lets the code itself
> walk the signal frames by just depending on the fault happening
> again.
Another example. Suppose there is a stack with a mprotected guard page
at the end. The app's stack grows into the guard page, sigsegv is
generated, its handler would be invoked, but a pthread_kill'ed SIGUSR1
gets delivered first. Now the SIGUSR1 handler accesses the stack and
triggers another fault, the sigsegv handler sees that si_ip ==
uc_mcontext->ip, so it unprotects the page and puts a frame on the
stack, arranging for a function to be called. Then the function
deadlocks because it waits for a signal that's blocked in the SIGUSR1
handler.
I think it would be a definite improvement to prevent all these
headaches from occurring and deliver asynchronously generated, thread
private signals after the synchronous ones.
> Linus
next prev parent reply other threads:[~2009-03-18 9:58 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-14 16:50 Signal delivery order Gábor Melis
2009-03-15 9:44 ` Oleg Nesterov
2009-03-15 14:40 ` Gábor Melis
2009-03-15 17:29 ` Oleg Nesterov
2009-03-15 22:06 ` Gábor Melis
2009-03-16 0:28 ` Oleg Nesterov
2009-03-16 8:34 ` Gábor Melis
2009-03-16 21:13 ` Oleg Nesterov
2009-03-16 22:56 ` Chris Friesen
2009-03-17 4:13 ` Q: SEGSEGV && uc_mcontext->ip (Was: Signal delivery order) Oleg Nesterov
2009-03-17 4:25 ` Oleg Nesterov
2009-03-17 8:23 ` Gábor Melis
2009-03-17 9:25 ` Oleg Nesterov
2009-03-17 10:20 ` Gábor Melis
2009-03-17 10:43 ` Oleg Nesterov
2009-03-17 15:56 ` Linus Torvalds
2009-03-17 19:20 ` Q: SEGSEGV && uc_mcontext->ip David Miller
2009-03-18 9:58 ` Gábor Melis [this message]
2009-03-18 7:59 ` Q: SEGSEGV && uc_mcontext->ip (Was: Signal delivery order) Roland McGrath
2009-03-18 9:02 ` RT signal queue overflow (Was: Q: SEGSEGV && uc_mcontext->ip (Was: Signal delivery order)) Gábor Melis
2009-03-18 14:52 ` Linus Torvalds
2009-03-18 15:23 ` Gábor Melis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200903181058.23247.mega@retes.hu \
--to=mega@retes.hu \
--cc=akpm@linux-foundation.org \
--cc=cfriesen@nortel.com \
--cc=davidel@xmailserver.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@redhat.com \
--cc=roland@redhat.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.