All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86: kill handle_signal()->set_fs()
Date: Sun, 10 Jul 2011 20:40:32 +0200	[thread overview]
Message-ID: <20110710184032.GA28312@redhat.com> (raw)
In-Reply-To: <4E19EEC2.7060806@zytor.com>

On 07/10, H. Peter Anvin wrote:
>
> On 07/10/2011 09:44 AM, Oleg Nesterov wrote:
> > handle_signal()->set_fs() has a nice comment which explains what
> > set_fs() is, but it doesn't explain why it is needed and why it
> > depends on CONFIG_X86_64.
> >
> > Afaics, the history of this confusion is:
> >
> > 	1. I guess today nobody can explain why it was needed
> > 	   in arch/i386/kernel/signal.c, perhaps it was always
> > 	   wrong. This predates 2.4.0 kernel.
> >
> > 	2. then it was copy-and-past'ed to the new x86_64 arch.
> >
> > 	3. then it was removed from i386 (but not from x86_64)
> > 	   by b93b6ca3 "i386: remove unnecessary code".
> >
> > 	4. then it was reintroduced under CONFIG_X86_64 when x86
> > 	   unified i386 and x86_64, because the patch above didn't
> > 	   touch x86_64.
> >
> > Remove it. ->addr_limit should be correct. Even if it was possible
> > that it is wrong, it is too late to fix it after setup_rt_frame().
> >
>
> The main reason I could think of why this would be necessary is if we
> take an event while we have fs == KERNEL_DS inside the kernel

this is possible if we are the kernel thread, or set_fs(KERNEL_DS) was
called.

> which is
> then promoted to a signal.

How? We are going to return to the user-space. Obviously this is not
possible with the kernel thread. So I think this can only happen if
we already have a bug with unbalanced set_fs().

Are you absolutely sure that can't happen?

> In particular, there should be a setting upstream of this, as you're
> correctly pointing out that it's too late.  If not, we might actually
> have a problem.

Hmm... Now I recall, this was already discussed 5 years ago. Thanks to
google, see http://lkml.org/lkml/2007/7/17/321

In particular, Linus sayd:

	Heh. I think it's entirely historical.

	Please realize that the whole reason that function is called "set_fs()" is
	that it literally used to set the %fs segment register, not
	"->addr_limit".

	So I think the "set_fs(USER_DS)" is there _only_ to match the other

		regs->xds = __USER_DS;
		regs->xes = __USER_DS;
		regs->xss = __USER_DS;
		regs->xcs = __USER_CS;

	things, and never mattered. And now it matters even less, and has been
	copied to all other architectures where it is just totally insane.

Oleg.


  reply	other threads:[~2011-07-10 18:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-10 16:44 [PATCH] x86: kill handle_signal()->set_fs() Oleg Nesterov
2011-07-10 18:26 ` H. Peter Anvin
2011-07-10 18:40   ` Oleg Nesterov [this message]
2011-07-14 19:02     ` Oleg Nesterov
2011-07-15  5:47 ` [tip:x86/signal] x86: Kill handle_signal()->set_fs() tip-bot for Oleg Nesterov

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=20110710184032.GA28312@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.