linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@amacapital.net>
To: Stas Sergeev <stsp@list.ru>
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 11:25:35 -0700	[thread overview]
Message-ID: <CALCETrU2Kt5tk4EBA+ZnqXr327YWQ_+u-L40=oaTma3n0Coouw@mail.gmail.com> (raw)
In-Reply-To: <55CB7BAE.9090503@list.ru>

On Wed, Aug 12, 2015 at 10:00 AM, Stas Sergeev <stsp@list.ru> wrote:
> 12.08.2015 19:19, Andy Lutomirski пишет:
>>
>> Maybe I'm still missing something, but this seems like it should be
>> unnecessary.  What goes wrong without it?
>
> Without it, dosemu stores and fetches the ss value
> elsewhere. It could use any place for it, be it even a global var.
> But with your patch, dosemu _needs_ to use the sigcontext.ss,
> because that's where the kernel now puts it.
> As a result, dosemu had to be changed to use sigcontext.ss
> to load the ss from. Sounds good? Not! :)
> The reality is that you'll have to work with the old headers,
> that still have no sigcontext.ss, and so you'd need to access
> ss via __pad0 in pretty much 100% of real-life setups.
> If there is such a need to touch uapi from time to time
> (and I understand this is the case), then perhaps you should
> invent some versioning or whatever, to save people from
> surprises.
> Yes, you took the field that was used for padding.
> But this doesn't help, because this is not a new functionality.
> The existing programs now _need_ to use your new field
> for what they did in the past without it. So it is nearly the
> same as renaming any of the existing widely used fields:
> people will need the autoconf hacks to probe its existence.
>

Yeah, I see the problem here.

>>>
>>> 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.  At this point,
it's a bit late for that.

>> It wouldn't even help here, because the breakage isn't caused by
>> incompatible sigcontext formats -- it's caused by dosemu's reliance on
>> ss being preserved across signal delivery
>
> I thought you mean some per-process flag that would
> preserve the backward-compatibility for the unaware apps.
> I probably got you wrong.

No, I meant a flag in sigcontext indicating which format was used.

>
>>   (even if it wasn't preserved
>> on the way back).
>
> How so?
> IIRC sometime fs/gs were restored, but I have no evidence
> the ss was. Could you clarify?

ss was never restored by sigreturn AFAIK.  I don't think that fs and
gs are, but I think they might have been a long long time ago (before
git).

>>>
>>> Good, but have you added any flag for dosemu to even know
>>> it can do this? Unless I am mistaken, you didn't. So the fix you
>>> suggest, is not easy to detect and make portable with the older
>>> kernels. Any suggestions?
>>>
>> You could probe for it directly: raise a signal, change the saved ss
>> and see what's in ss after sigreturn.
>
> Umm, nope.

Why not?  The safest general way to detect new features is to try to use them.

>
>> 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.

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'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.

--Andy

  reply	other threads:[~2015-08-12 18:25 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 [this message]
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
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='CALCETrU2Kt5tk4EBA+ZnqXr327YWQ_+u-L40=oaTma3n0Coouw@mail.gmail.com' \
    --to=luto@amacapital.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stsp@list.ru \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).