From: Stas Sergeev <stsp@list.ru>
To: Andy Lutomirski <luto@amacapital.net>
Cc: X86 ML <x86@kernel.org>, 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: Wed, 12 Aug 2015 22:55:58 +0300 [thread overview]
Message-ID: <55CBA4CE.1040108@list.ru> (raw)
In-Reply-To: <CALCETrXUW0cfvk3K4KsYBM3FiiLqGRGZkyDk8751UsXHu+MJSQ@mail.gmail.com>
12.08.2015 22:20, Andy Lutomirski пишет:
> On Wed, Aug 12, 2015 at 11:55 AM, Stas Sergeev <stsp@list.ru> wrote:
>> 12.08.2015 21:25, Andy Lutomirski пишет:
>>>>>>
>>>>>> https://github.com/stsp/dosemu2/commit/7898ac60d5e569964127d6cc48f592caecd20b81
>>>>> So the problem is that dosemu was actually hacking around the old
>>>>> buggy behavior and thus relying on it. Grr.
>>>> What else it could do? :(
>>> Going back in time? Ask the kernel to fix the issue.
>> Like this?
>> http://www.x86-64.org/pipermail/discuss/2007-May/009913.html
>> And this:
>> http://www.x86-64.org/pipermail/discuss/2007-May/009923.html
> I apologize on behalf of the upstream kernel in 2007. :-/ I wasn't
> really involved at that point.
:)
>>>>> Let me see if I can come up with a clean kernel fix.
>>>> The check for proper sigreturn would be good.
>>> I still don't see how sigreturn matters here. It's signal *delivery*
>>> that's the problem.
>> But the delivery can be easily checked with "if (ss & 4)".
>> What remains is just a sigreturn instead of iret.
>>
>>> I'm thinking of having signal delivery zap ss only if the old ss looks
>>> bogus instead of zapping it unconditionally. IOW, instead of setting
>>> regs->ss = __USER_DS unconditionally, we'd do larl on the old regs->ss
>>> and keep it if it's DPL 3 RW data (exp-down or otherwise) and present.
>> I am not sure how good is this.
>> Yes, may help for a backward-compatibility.
>> But OTOH the 32bit kernel saves _all_ registers, including
>> ss, which is IMHO the right thing to do in general.
> I agree. So does x32.
>
> Are you planning on merging your patches into upstream DOSEMU?
Unlikely.
My git tree counts ~3000 patches already, so it is an
entirely separate project, which just happen to share
some code with dosemu (and under different license).
But we can discuss a binary-compatible fix, so that the
original dosemu can work too.
>>> I'll have to check the precise rules in both the SDM and APM. The
>>> idea is that we don't want IRET to fail during signal delivery, which
>>> can happen due to a bad sigreturn or a race against modify_ldt.
>> Well, this is a "very basic" idea, so to say.
>> The fact that segregs are not restored, have much more
>> consequences, and since now you already broke things,
>> I wonder if something can be finally fixed for good...
>>
>> What alternatives do we have? Can we do something
>> really brave, introduce a new sigaction flag perhaps, that
>> will just restore all segregs for new apps, and none - for
>> old apps? I mean the above gcc bugzilla ticket in particular -
>> very annoying one...
> We might need to do that.
>
> Here's a nasty case:
>
> void sighandler(...) {
> switch_userspace_thread();
> }
>
> Suppose that switch_userspace_thread() changes fs. Now what? On
The crash - see the gcc ticket in the prev e-mail.
If fs on function entry differs from fs on exit, the gcc
stack protector will terminate the program.
So such code will not exist, except maybe in some
asm form...
> current kernels, it stays switched. If we change this, it won't stay
> switched. Even ignoring old ABI, it's not really clear to me what the
> right thing to do is.
There can be the following cases:
- switch_userspace_thread() switches fs to non-zero selector
- switch_userspace_thread() switches the fs base via syscall
- switch_userspace_thread() switches fs in sigcontext
- switch_userspace_thread() switches fs_base in sigcontext (???)
What exactly case do you have in mind?
I'd say, the way x86_32 is doing things - is good, but the
bases... perhaps, in ideal world, they should be a part of
the sigcontext as well?
next prev parent reply other threads:[~2015-08-12 19:56 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-12 0:17 [regression] x86/signal/64: Fix SS handling for signals delivered to 64-bit programs breaks dosemu 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 [this message]
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
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=55CBA4CE.1040108@list.ru \
--to=stsp@list.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=x86@kernel.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.