From: Stas Sergeev <stsp@list.ru>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Raymond Jennings <shentino@gmail.com>,
Cyrill Gorcunov <gorcunov@gmail.com>,
Pavel Emelyanov <xemul@parallels.com>,
Linux kernel <linux-kernel@vger.kernel.org>
Subject: Re: [regression] x86/signal/64: Fix SS handling for signals delivered to 64-bit programs breaks dosemu
Date: Fri, 14 Aug 2015 01:25:44 +0300 [thread overview]
Message-ID: <55CD1968.7070002@list.ru> (raw)
In-Reply-To: <CALCETrVX-Op1U-RED9bkb3R9v7jcu5O1ur1Yt08ppZ0VFyZx7A@mail.gmail.com>
14.08.2015 01:11, Andy Lutomirski пишет:
> On Thu, Aug 13, 2015 at 3:02 PM, Stas Sergeev <stsp@list.ru> wrote:
>> 14.08.2015 00:46, Linus Torvalds пишет:
>>> On Thu, Aug 13, 2015 at 2:42 PM, Raymond Jennings <shentino@gmail.com>
>>> wrote:
>>>> I am curious about what's supposed to happen normally on signal delivery.
>>>>
>>>> Is SS a register that's supposed to be preserved like EIP/RIP and CS when
>>>> a
>>>> signal is delivered?
>>> What exactly does "supposed" mean?
>>>
>>> On x86-64, we traditionally haven't touched SS, because it doesn't
>>> really matter in 64-bit long mode. And apparently dosemu depended on
>>> that behavior.
>>>
>>> So clearly, we're not "supposed" to save/restore it. Because reality
>>> matters a hell of a lot more than any theoretical arguments.
>> Unless you introduce some clever flag to explicitly request its restoring.
>> There is another problem as well which is that gcc assumes
>> FS base to point to TLS at function prolog. Since FS is not
>> restored too, the only suggestion I get is to write a sighandlers
>> in asm... I wonder if someone really should write a sighandler in
>> asm to restore FS base manually with a syscall.
>> So I think the reality is asking for a new flag. :)
> I still don't see how this hypothetical flag would work.
>
> The relevant task state consists of FS and the hidden FS base
> register. If you build with -fstack-protector, GCC really wants the
> FS base register to point to the right place. So you can't change it
> in the middle of a C function (because the prologue and epilogue will
> fail to match).
>
> Now suppose you set some magic flag and jump (via sigreturn,
> trampoline, whatever) into DOS code. The DOS code loads 0x7 into FS
> and then gets #GP. You land in a signal handler. As far as the
> kernel's concerned, the FS base register is whatever the base of LDT
> entry 0 is. What else is the kernel supposed to shove in there?
The same as what happens when you do in userspace:
---
asm ("mov $0,%%fs\n");
prctl(ARCH_SET_FS, my_tls_base);
---
This was the trick I did before gcc started to use FS in prolog,
now I have to do this in asm.
But how simpler for the kernel is to do the same?
> I think that making this work fully in the kernel would require a
> full-blown FS equivalent of sigaltstack, and that seems like overkill.
Setting selector and base is what you call an "equivalent of sigaltstack"?
next prev parent reply other threads:[~2015-08-13 22:25 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-12 0:17 Stas Sergeev
2015-08-12 0:38 ` Andy Lutomirski
2015-08-12 8:02 ` Stas Sergeev
2015-08-12 16:19 ` Andy Lutomirski
2015-08-12 17:00 ` Stas Sergeev
2015-08-12 18:25 ` Andy Lutomirski
2015-08-12 18:55 ` Stas Sergeev
2015-08-12 19:20 ` Andy Lutomirski
2015-08-12 19:55 ` Stas Sergeev
2015-08-12 20:01 ` Andy Lutomirski
2015-08-12 20:14 ` Stas Sergeev
2015-08-12 20:28 ` Andy Lutomirski
2015-08-12 20:45 ` Stas Sergeev
2015-08-12 20:47 ` Andy Lutomirski
2015-08-12 20:55 ` Stas Sergeev
2015-08-12 21:37 ` Andy Lutomirski
2015-08-12 21:50 ` Stas Sergeev
2015-08-12 22:00 ` Andy Lutomirski
2015-08-13 8:39 ` Ingo Molnar
2015-08-13 10:14 ` Stas Sergeev
2015-08-13 12:44 ` Stas Sergeev
2015-08-13 14:58 ` Andy Lutomirski
2015-08-13 15:22 ` Stas Sergeev
2015-08-13 15:38 ` Andy Lutomirski
2015-08-13 16:03 ` Stas Sergeev
2015-08-13 16:09 ` Andy Lutomirski
2015-08-13 16:20 ` Stas Sergeev
2015-08-13 16:24 ` Andy Lutomirski
2015-08-13 16:38 ` Stas Sergeev
2015-08-13 16:42 ` Andy Lutomirski
2015-08-13 16:48 ` Stas Sergeev
2015-08-13 16:59 ` Andy Lutomirski
2015-08-13 17:13 ` Stas Sergeev
2015-08-13 17:17 ` Andy Lutomirski
2015-08-13 18:00 ` Stas Sergeev
2015-08-13 18:05 ` Andy Lutomirski
2015-08-13 18:19 ` Stas Sergeev
2015-08-13 18:25 ` Andy Lutomirski
2015-08-13 18:35 ` Stas Sergeev
2015-08-22 12:38 ` Ingo Molnar
2015-08-22 14:19 ` Stas Sergeev
2015-08-23 6:25 ` Ingo Molnar
2015-08-13 11:08 ` Stas Sergeev
2015-08-13 15:37 ` Linus Torvalds
2015-08-13 15:43 ` Andy Lutomirski
2015-08-13 16:19 ` Linus Torvalds
2015-08-13 16:23 ` Andy Lutomirski
2015-08-13 16:34 ` Linus Torvalds
2015-08-13 16:43 ` Linus Torvalds
2015-08-13 16:44 ` Andy Lutomirski
2015-08-13 17:00 ` Brian Gerst
2015-08-18 6:29 ` Stas Sergeev
2015-08-18 22:42 ` Andy Lutomirski
2015-08-18 22:47 ` Andy Lutomirski
2015-08-19 9:35 ` Stas Sergeev
2015-08-19 15:46 ` Andy Lutomirski
2015-08-19 16:30 ` Stas Sergeev
2015-09-02 5:12 ` Andy Lutomirski
2015-09-02 9:17 ` Stas Sergeev
2015-09-02 14:21 ` Andy Lutomirski
2015-09-02 15:02 ` Andy Lutomirski
2015-09-02 17:46 ` Stas Sergeev
2015-09-02 18:17 ` Andy Lutomirski
2015-09-02 18:23 ` Stas Sergeev
2015-09-02 19:06 ` Andy Lutomirski
2015-09-02 21:01 ` Stas Sergeev
2015-09-02 21:39 ` Andy Lutomirski
2015-09-02 22:25 ` Stas Sergeev
2015-09-02 22:25 ` Andy Lutomirski
2015-09-02 23:01 ` Stas Sergeev
2015-08-19 10:10 ` Stas Sergeev
2015-08-19 15:35 ` Andy Lutomirski
2015-08-14 8:10 ` Cyrill Gorcunov
2015-08-13 17:51 ` Stas Sergeev
2015-08-13 18:35 ` Linus Torvalds
2015-08-13 18:41 ` Andy Lutomirski
2015-08-13 19:05 ` Stas Sergeev
2015-08-13 19:49 ` Andy Lutomirski
2015-08-13 20:09 ` Stas Sergeev
2015-08-13 19:53 ` Linus Torvalds
2015-08-13 20:08 ` Cyrill Gorcunov
2015-08-13 20:09 ` Linus Torvalds
2015-08-13 21:42 ` Raymond Jennings
2015-08-13 21:46 ` Linus Torvalds
2015-08-13 22:01 ` Raymond Jennings
2015-08-13 22:05 ` Stas Sergeev
2015-08-13 23:05 ` Linus Torvalds
2015-08-13 23:18 ` Linus Torvalds
2015-08-13 23:35 ` Raymond Jennings
2015-08-13 23:43 ` Stas Sergeev
2015-08-14 0:02 ` Linus Torvalds
2015-08-13 22:02 ` Stas Sergeev
2015-08-13 22:11 ` Andy Lutomirski
2015-08-13 22:25 ` Stas Sergeev [this message]
2015-08-13 22:29 ` Andy Lutomirski
2015-08-13 22:51 ` Stas Sergeev
2015-08-13 23:00 ` Andy Lutomirski
2015-08-13 23:17 ` Stas Sergeev
2015-08-14 0:00 ` Stas Sergeev
2015-08-14 0:05 ` Andy Lutomirski
2015-08-14 0:17 ` Stas Sergeev
2015-08-14 0:27 ` Linus Torvalds
2015-08-14 0:50 ` Stas Sergeev
2015-08-14 1:21 ` Andy Lutomirski
2015-08-14 1:32 ` Stas Sergeev
2015-08-14 1:37 ` Andy Lutomirski
2015-08-14 2:03 ` Stas Sergeev
2015-08-18 6:19 ` Stas Sergeev
2015-08-14 0:08 ` Linus Torvalds
2015-08-14 0:24 ` Andy Lutomirski
2015-08-14 0:40 ` Linus Torvalds
2015-08-14 7:22 ` Cyrill Gorcunov
2015-08-14 10:02 ` Pavel Emelyanov
2015-08-14 10:53 ` Cyrill Gorcunov
2015-08-13 18:57 ` Stas Sergeev
2015-08-13 19:01 ` Andy Lutomirski
2015-08-13 19:13 ` Stas Sergeev
2015-08-13 19:37 ` Linus Torvalds
2015-08-13 19:59 ` Stas Sergeev
2015-08-13 20:07 ` Linus Torvalds
2015-08-18 6:40 ` Stas Sergeev
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=55CD1968.7070002@list.ru \
--to=stsp@list.ru \
--cc=gorcunov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=shentino@gmail.com \
--cc=torvalds@linux-foundation.org \
--cc=xemul@parallels.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome