linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stas Sergeev <stsp@list.ru>
To: Ingo Molnar <mingo@kernel.org>, Andy Lutomirski <luto@amacapital.net>
Cc: X86 ML <x86@kernel.org>,
	Linux kernel <linux-kernel@vger.kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Brian Gerst <brgerst@gmail.com>, Borislav Petkov <bp@alien8.de>,
	Stas Sergeev <stsp@users.sourceforge.net>
Subject: Re: [regression] x86/signal/64: Fix SS handling for signals delivered to 64-bit programs breaks dosemu
Date: Thu, 13 Aug 2015 13:14:38 +0300	[thread overview]
Message-ID: <55CC6E0E.6080904@list.ru> (raw)
In-Reply-To: <20150813083949.GA17091@gmail.com>

13.08.2015 11:39, Ingo Molnar пишет:
> * Andy Lutomirski <luto@amacapital.net> wrote:
>
>>> OK.
>>> I'll try to test the patch tomorrow, but I think the sigreturn()'s
>>> capability detection is still needed to easily replace the iret trampoline
>>> in userspace (without generating a signal and testing by hands).
>>> Can of course be done with a run-time kernel version check...
>> That feature is so specialized that I think you should just probe it.
>>
>> void foo(...) {
>>    sigcontext->ss = 7;
>> }
>>
>> modify_ldt(initialize descriptor 0);
>> sigaction(SIGUSR1, foo, SA_SIGINFO);
>> if (ss == 7)
>>    yay;
>>
>> Fortunately, all kernels that restore ss also have espfix64, so you
>> don't need to worry about esp[31:16] corruption on those kernels
>> either.
>>
>> I suppose we could add a new uc_flag to indicate that ss is saved and restored,
>> though.  Ingo, hpa: any thoughts on that?  There will always be some kernel
>> versions that save and restore ss but don't set the flag, though.
> So this new flag would essentially be a 'the ss save/restore bug is fixed for
> sure' flag, not covering old kernels that happen to have the correct behavior,
> right?
>
> Could you please map out the range of kernel versions involved - which ones:
"me too"
I'll just hard-code that version info into an app - testing version
is the same as testing the flag.

> 	- 'never do the right thing'
> 	- 'do the right thing sometimes'
> 	- 'do the right thing always, but by accident'
> 	- 'do the right thing always and intentionally'
>
> ?
>
> I'd hate to complicate a legacy ABI any more. My gut feeling is to let apps either
> assume that the kernel works right, or probe the actual behavior.
The problem is that current apps assume the kernel works _wrong_,
here's the reference:
http://www.x86-64.org/pipermail/discuss/2007-May/009913.html
http://www.x86-64.org/pipermail/discuss/2007-May/009923.html
And as such, they break.
Details earlier in that thread.

>   Adding the flag
> just makes it easy to screw certain kernel versions that would still work fine if
> the app used actual probing. So I don't see the flag as an improvement.
>
> If your patch fixes the regression that would be a good first step.
Unfortunately, the currently proposed patch puts the kernel
in the category 'do the right thing sometimes' from the current
'do the right thing always and intentionally'. This helps the legacy
apps to work though...
I am not saying this patch should not be applied, but I'd like
to discuss the alternatives a bit (although Andy already put it clear
that this is likely the final decision, so I am just putting a newly CCed
people into a course of events).

Possibilities:
1. leave things as they are and fix dosemu instead (this is against
the kernel policy to not break userspace, but I wonder how relevant
dosemu is today)
2. Apply Andy's patch that does tricky sanity tests with lar, and
if they pass - do not restore the right ss value.
3. Admitting the wider problem, for example TLS is also not restored:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66631
and fix everything at once, probably adding a new sigaction()
flag to allow an apps to request the behaviour they need (keeping
the old behaviour by default).

Of course all of the above have pros and cons.
3 is a lot of work, both 1 and 2 have patches ready.

> Please also send the fix in email instead of just pointing to a Git tree, so that
> people can comment on it.
A reference for newly CCed people:
https://git.kernel.org/cgit/linux/kernel/git/luto/linux.git/commit/?h=x86/sigcontext&id=83a08d8c3f43c5524ffc0d88c0eff747716696f5
Not the prettiest possible approach, but at least should work...

  reply	other threads:[~2015-08-13 10:14 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
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 [this message]
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=55CC6E0E.6080904@list.ru \
    --to=stsp@list.ru \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=stsp@users.sourceforge.net \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --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).