linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Dmitry V. Levin" <ldv@altlinux.org>
To: hpa@zytor.com
Cc: Ingo Molnar <mingo@kernel.org>, Andy Lutomirski <luto@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, X86 ML <x86@kernel.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Eugene Syromyatnikov <evgsyr@gmail.com>,
	linux-kernel@vger.kernel.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Dmitry V. Levin" <ldv@altlinux.org>
Subject: Re: [PATCH] x86/asm/64: do not clear high 32 bits of syscall number when CONFIG_X86_X32=y
Date: Sun, 17 Sep 2017 19:45:07 +0300	[thread overview]
Message-ID: <20170917164506.GA28036@altlinux.org> (raw)
In-Reply-To: <CAE4B646-5A5D-4FB6-89A3-45DD78B64FFD@zytor.com>

[-- Attachment #1: Type: text/plain, Size: 2792 bytes --]

On Thu, Sep 14, 2017 at 10:46:37PM -0700, hpa@zytor.com wrote:
> On September 14, 2017 10:31:55 PM PDT, Ingo Molnar <mingo@kernel.org> wrote:
> >
> >* Andy Lutomirski <luto@kernel.org> wrote:
> >
> >> >> > diff --git a/arch/x86/entry/entry_64.S
> >b/arch/x86/entry/entry_64.S
> >> >> > index 4916725..3bab6af 100644
> >> >> > --- a/arch/x86/entry/entry_64.S
> >> >> > +++ b/arch/x86/entry/entry_64.S
> >> >> > @@ -185,12 +185,10 @@ entry_SYSCALL_64_fastpath:
> >> >> >          */
> >> >> >         TRACE_IRQS_ON
> >> >> >         ENABLE_INTERRUPTS(CLBR_NONE)
> >> >> > -#if __SYSCALL_MASK == ~0
> >> >> > -       cmpq    $__NR_syscall_max, %rax
> >> >> > -#else
> >> >> > -       andl    $__SYSCALL_MASK, %eax
> >> >> > -       cmpl    $__NR_syscall_max, %eax
> >> >> > +#if __SYSCALL_MASK != ~0
> >> >> > +       andq    $__SYSCALL_MASK, %rax
> >> >> >  #endif
> >> >> > +       cmpq    $__NR_syscall_max, %rax
> >> >>
> >> >> I don't know much about x32 userspace, but there's an argument
> >that
> >> >> the high bits *should* be masked off if the x32 bit is set.
> >> >
> >> > Why?
> >> 
> >> Because it always worked that way.
> >> 
> >> That being said, I'd be okay with applying your patch and seeing
> >> whether anything breaks.  Ingo?
> >
> >So I believe this was introduced with x32 as a 'fresh, modern syscall
> >ABI' 
> >behavioral aspect, because we wanted to protect the overly complex
> >syscall entry 
> >code from 'weird' input values. IIRC there was an old bug where we'd
> >overflow the 
> >syscall table in certain circumstances ...
> >
> >But our new, redesigned entry code is a lot less complex, a lot more
> >readable and 
> >a lot more maintainable (not to mention a lot more robust), so if
> >invalid RAX 
> >values with high bits set get reliably turned into -ENOSYS or such then
> >I'd not 
> >mind the patch per se either, as a general consistency improvement.
> >
> >Of course if something in x32 user-land breaks then this turns into an
> >ABI and we 
> >have to reintroduce this aspect, as a quirk :-/
> >
> >It should also improve x32 syscall performance a tiny bit, right? So
> >might be 
> >worth a try on various grounds.
> >
> >( Another future advantage would be that _maybe_ we could use the high
> >RAX 
> >component as an extra (64-bit only) special argument of sorts. Not that
> >I can 
> >  think of any such use right now. )
> >
> >Thanks,
> >
> >	Ingo
> 
> x32 should be sharing the native 64-but entry code, by design.
> We have had the latter mask the upper 32 bits,

There must be some misunderstanding on your side: the clearing
of the upper 32 bits of 64-bit syscall numbers currently happens
if and only if fastpath and CONFIG_X86_X32_ABI is enabled.


-- 
ldv

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

  reply	other threads:[~2017-09-17 16:45 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-12 22:57 [PATCH] x86/asm/64: do not clear high 32 bits of syscall number when CONFIG_X86_X32=y Dmitry V. Levin
2017-09-13 16:49 ` Oleg Nesterov
2017-09-14 19:40   ` Eugene Syromyatnikov
2017-09-14 20:24     ` Dmitry V. Levin
2017-09-14 20:21   ` Dmitry V. Levin
2017-09-15 16:12     ` Oleg Nesterov
2017-09-14 21:05 ` Andy Lutomirski
2017-09-14 21:33   ` Dmitry V. Levin
2017-09-14 21:38     ` Andy Lutomirski
2017-09-15  5:31       ` Ingo Molnar
2017-09-15  5:46         ` hpa
2017-09-17 16:45           ` Dmitry V. Levin [this message]
2017-09-15  5:47         ` hpa

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=20170917164506.GA28036@altlinux.org \
    --to=ldv@altlinux.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=evgsyr@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --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).