From: ebiederm@xmission.com (Eric W. Biederman)
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Andy Lutomirski <luto@kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
Andrei Vagin <avagin@virtuozzo.com>,
Thomas Gleixner <tglx@linutronix.de>, Greg KH <greg@kroah.com>,
Andrey Vagin <avagin@openvz.org>, Serge Hallyn <serge@hallyn.com>,
Pavel Emelyanov <xemul@virtuozzo.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
Peter Zijlstra <peterz@infradead.org>, Willy Tarreau <w@1wt.eu>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
Linux API <linux-api@vger.kernel.org>,
Linux Containers <containers@lists.linux-foundation.org>,
Michael Kerrisk <mtk.manpages@gmail.com>
Subject: Re: Simplfying copy_siginfo_to_user
Date: Mon, 31 Jul 2017 11:37:41 -0500 [thread overview]
Message-ID: <87mv7k1s16.fsf@xmission.com> (raw)
In-Reply-To: <20170725013756.GH2063@ZenIV.linux.org.uk> (Al Viro's message of "Tue, 25 Jul 2017 02:37:57 +0100")
Al Viro <viro@ZenIV.linux.org.uk> writes:
2> On Mon, Jul 24, 2017 at 10:43:34AM -0700, Linus Torvalds wrote:
>> On Sat, Jul 22, 2017 at 1:25 PM, Eric W. Biederman
>> <ebiederm@xmission.com> wrote:
>> > I played with some clever changes such as limiting the copy to 48 bytes,
>> > disabling the memset and the like but I could not get a strong enough
>> > signal to say that any one change removed the extra or a clear part of
>> > it 20ns.
>>
>> What CPU did you use? Because the SMAP bit in particular matters.
>>
>> The field-by-field copies are extremely slow on modern CPU's that
>> implement SMAP, unless you also use the special "unsafe_put_user()"
>> code (or the nasty old put_user_ex() code that some of the x86 signal
>> code uses).
>>
>> So one of the advantages of just copy_to_user() ends up being visible
>> only on Broadwell+ (or whatever the SMAP cutoff is).
>
> Guys, could you take a look at vfs.git#work.siginfo? I'd been pretty
> much buried lately (and probably will for several more weeks - long-distance
> moves *suck*), so that thing got stalled, but it might be worth a
> look.
There is some good stuff in there. If you don't mind I am going to
cherry pick out your unification of struct siginfo and struct compat_siginfo.
> The code generated in copy_siginfo_to_user() in it looks reasonably good,
> we don't copy more than we need and all copying to userland is done
> by copy_to_user() - one call per call of copy_siginfo_to_user(), so
> SMAP crap is not an issue.
There is actually a core problem with doing things that way. You rely
on having the siginfo union member stored in the high bits of si_code.
I have just fixed that in my tree and replaced using the high bits
with calling the function siginfo_layout.
It has been a significant problem storing the union member differently
in the kernel than in userspace. It has allowed for some pretty
horrendous gaffs in the archictecures changing the meaning of SI_USER
when specific signals are delivered over. It has also meant that ptrace
siginfo injection and tg_sigqueueinfo have been broken for some signals
almost since the interface was added.
Without any optimization and just changing the code to be copy_to_user
I am seeing a maybe 2% slowdown. Given that no one has seemed to care
overly for the performance of signal delivery I suspect an almost
unmeasurable slowdown is a reasonable tradeoff for simpler code.
> The next thing I hope to do is converting compat side of that thing to
> the same; that got stalled.
All of that said your precise copying code appears reasonable and quite
nice so I may adopt it on the compat side.
> Al "Buried in boxes" Viro...
Eric "Also Buried in boxes" Biederman
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman)
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Andy Lutomirski <luto@kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
Andrei Vagin <avagin@virtuozzo.com>,
Thomas Gleixner <tglx@linutronix.de>, Greg KH <greg@kroah.com>,
Andrey Vagin <avagin@openvz.org>, Serge Hallyn <serge@hallyn.com>,
Pavel Emelyanov <xemul@virtuozzo.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
Peter Zijlstra <peterz@infradead.org>, Willy Tarreau <w@1wt.eu>,
"linux-arch\@vger.kernel.org" <linux-arch@vger.kernel.org>,
Linux API <linux-api@vger.kernel.org>,
Linux Containers <containers@lists.linux-foundation.org>,
Michael Kerrisk <mtk.manpages@gmail.com>
Subject: Re: Simplfying copy_siginfo_to_user
Date: Mon, 31 Jul 2017 11:37:41 -0500 [thread overview]
Message-ID: <87mv7k1s16.fsf@xmission.com> (raw)
In-Reply-To: <20170725013756.GH2063@ZenIV.linux.org.uk> (Al Viro's message of "Tue, 25 Jul 2017 02:37:57 +0100")
Al Viro <viro@ZenIV.linux.org.uk> writes:
2> On Mon, Jul 24, 2017 at 10:43:34AM -0700, Linus Torvalds wrote:
>> On Sat, Jul 22, 2017 at 1:25 PM, Eric W. Biederman
>> <ebiederm@xmission.com> wrote:
>> > I played with some clever changes such as limiting the copy to 48 bytes,
>> > disabling the memset and the like but I could not get a strong enough
>> > signal to say that any one change removed the extra or a clear part of
>> > it 20ns.
>>
>> What CPU did you use? Because the SMAP bit in particular matters.
>>
>> The field-by-field copies are extremely slow on modern CPU's that
>> implement SMAP, unless you also use the special "unsafe_put_user()"
>> code (or the nasty old put_user_ex() code that some of the x86 signal
>> code uses).
>>
>> So one of the advantages of just copy_to_user() ends up being visible
>> only on Broadwell+ (or whatever the SMAP cutoff is).
>
> Guys, could you take a look at vfs.git#work.siginfo? I'd been pretty
> much buried lately (and probably will for several more weeks - long-distance
> moves *suck*), so that thing got stalled, but it might be worth a
> look.
There is some good stuff in there. If you don't mind I am going to
cherry pick out your unification of struct siginfo and struct compat_siginfo.
> The code generated in copy_siginfo_to_user() in it looks reasonably good,
> we don't copy more than we need and all copying to userland is done
> by copy_to_user() - one call per call of copy_siginfo_to_user(), so
> SMAP crap is not an issue.
There is actually a core problem with doing things that way. You rely
on having the siginfo union member stored in the high bits of si_code.
I have just fixed that in my tree and replaced using the high bits
with calling the function siginfo_layout.
It has been a significant problem storing the union member differently
in the kernel than in userspace. It has allowed for some pretty
horrendous gaffs in the archictecures changing the meaning of SI_USER
when specific signals are delivered over. It has also meant that ptrace
siginfo injection and tg_sigqueueinfo have been broken for some signals
almost since the interface was added.
Without any optimization and just changing the code to be copy_to_user
I am seeing a maybe 2% slowdown. Given that no one has seemed to care
overly for the performance of signal delivery I suspect an almost
unmeasurable slowdown is a reasonable tradeoff for simpler code.
> The next thing I hope to do is converting compat side of that thing to
> the same; that got stalled.
All of that said your precise copying code appears reasonable and quite
nice so I may adopt it on the compat side.
> Al "Buried in boxes" Viro...
Eric "Also Buried in boxes" Biederman
next prev parent reply other threads:[~2017-07-31 16:37 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87lgot2loq.fsf@xmission.com>
[not found] ` <87zid90vye.fsf_-_@xmission.com>
[not found] ` <20170615225426.GP31671@ZenIV.linux.org.uk>
[not found] ` <87poe4zrs1.fsf@xmission.com>
[not found] ` <CA+55aFxpv+gchzs7AYgSC8feAOV=B6mjFgBVm4Kx+83J2CNE-w@mail.gmail.com>
[not found] ` <87poe3vsa9.fsf@xmission.com>
[not found] ` <CALCETrX=SquyR8JZqHDNx=_FQKQo-0u9AxfdUwJs_hujVO2A-g@mail.gmail.com>
[not found] ` <87h8zfua59.fsf@xmission.com>
[not found] ` <CALCETrWPBn31Dye=81r2ZMainNOnDy5c_QxbU2uRjnJs0ie=Zg@mail.gmail.com>
[not found] ` <87r2yjsuwl.fsf@xmission.com>
[not found] ` <20170616191602.GA10675@1wt.eu>
[not found] ` <20170616191602.GA10675-K+wRfnb2/UA@public.gmane.org>
2017-06-30 12:36 ` [PATCH 0/8] signal: Fix sending signals with siginfo Eric W. Biederman
2017-06-30 12:36 ` Eric W. Biederman
2017-06-30 12:36 ` Eric W. Biederman
2017-07-18 14:04 ` [PATCH v2 0/7] " Eric W. Biederman
2017-07-18 14:04 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 1/7] signal/alpha: Document a conflict with SI_USER for SIGTRAP Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
[not found] ` <20170718140651.15973-1-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-18 18:22 ` Richard Henderson
2017-07-18 18:22 ` Richard Henderson
[not found] ` <87o9shg7t7.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 2/7] signal/ia64: Document a conflict with SI_USER with SIGFPE Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 3/7] signal/sparc: " Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 4/7] signal/mips: " Eric W. Biederman
2017-07-18 14:06 ` [PATCH 5/7] signal/testing: Don't look for __SI_FAULT in userspace Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 6/7] fcntl: Don't use ambiguous SIG_POLL si_codes Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
[not found] ` <20170718140651.15973-6-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-20 16:16 ` Oleg Nesterov
2017-07-20 16:16 ` Oleg Nesterov
2017-07-21 2:33 ` Eric W. Biederman
[not found] ` <20170720161603.GA14430-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-07-21 2:33 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 7/7] signal: Remove kernel interal si_code magic Eric W. Biederman
2017-07-18 14:06 ` Eric W. Biederman
[not found] ` <20170718140651.15973-7-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-18 16:57 ` Linus Torvalds
2017-07-18 16:57 ` Linus Torvalds
2017-07-18 16:57 ` Linus Torvalds
[not found] ` <CA+55aFyKsmf+BpYjcH30MGpHTDJ=zgYPx6kwyEB9CXXFxj_xsw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-18 17:27 ` Eric W. Biederman
2017-07-18 17:27 ` Eric W. Biederman
2017-07-18 17:27 ` Eric W. Biederman
[not found] ` <878tjlbqpt.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-22 20:25 ` Simplfying copy_siginfo_to_user Eric W. Biederman
2017-07-22 20:25 ` Eric W. Biederman
2017-07-22 20:25 ` Eric W. Biederman
[not found] ` <8760ek5ics.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-24 17:43 ` Linus Torvalds
2017-07-24 17:43 ` Linus Torvalds
[not found] ` <CA+55aFyH5W2doo9vxXta_-pXfNXqQ19d7z48k1hmfAot+aJvMw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-24 19:01 ` Eric W. Biederman
2017-07-24 19:01 ` Eric W. Biederman
2017-07-24 19:01 ` Eric W. Biederman
2017-07-25 1:37 ` Al Viro
2017-07-25 1:37 ` Al Viro
2017-07-31 16:37 ` Eric W. Biederman [this message]
2017-07-31 16:37 ` Eric W. Biederman
[not found] ` <20170725013756.GH2063-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2017-07-31 16:37 ` Eric W. Biederman
2017-07-18 14:06 ` [PATCH 4/7] signal/mips: Document a conflict with SI_USER with SIGFPE Eric W. Biederman
2017-08-07 16:18 ` Maciej W. Rozycki
2017-08-07 16:18 ` Maciej W. Rozycki
[not found] ` <alpine.DEB.2.00.1708071706290.17596-AURtyoD2VtPP6B53oEZunQ@public.gmane.org>
2017-08-07 17:41 ` Linus Torvalds
2017-08-08 15:29 ` Eric W. Biederman
2017-08-07 17:41 ` Linus Torvalds
[not found] ` <CA+55aFx3ss90b4x2bo4si80kQUjMVL1zUX3Oxvu04OE14nUtFw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-07 19:55 ` Ralf Baechle
2017-08-07 19:55 ` Ralf Baechle
2017-08-08 15:29 ` Eric W. Biederman
2017-08-08 15:29 ` Eric W. Biederman
[not found] ` <87mv7agjsh.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-08-08 23:19 ` Maciej W. Rozycki
2017-08-08 23:19 ` Maciej W. Rozycki
2017-08-08 23:19 ` Maciej W. Rozycki
[not found] ` <20170718140651.15973-4-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-08-07 16:18 ` Maciej W. Rozycki
[not found] ` <87bmp5y7nj.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2017-07-18 14:04 ` [PATCH v2 0/7] signal: Fix sending signals with siginfo Eric W. Biederman
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=87mv7k1s16.fsf@xmission.com \
--to=ebiederm@xmission.com \
--cc=avagin@openvz.org \
--cc=avagin@virtuozzo.com \
--cc=containers@lists.linux-foundation.org \
--cc=gorcunov@openvz.org \
--cc=greg@kroah.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=serge@hallyn.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=viro@ZenIV.linux.org.uk \
--cc=w@1wt.eu \
--cc=xemul@virtuozzo.com \
/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.