Messages in this thread | | | Date | Sat, 7 Jul 2018 16:06:45 +0100 | From | Russell King - ARM Linux <> | Subject | Re: [RFC PATCH for 4.18 3/5] rseq: uapi: declare rseq_cs field as union, update includes |
| |
On Fri, Jul 06, 2018 at 12:56:58PM -0700, Linus Torvalds wrote: > On Fri, Jul 6, 2018 at 12:38 PM Mathieu Desnoyers > <mathieu.desnoyers@efficios.com> wrote: > > > > Should I change all 4 bytes __get_user()/__put_user() in kernel/rseq.c > > for get_user()/put_user() to ensure consistency ? > > Probably. > > *If* this actually turns out to be somethinig that shows up on > profiles, it's almost certainly going to be the STAC/CLAC instructions > ("perf report" tends to report them as three one-byte nop's because > that's how they look before instruction replacement). > > And then it's not __get/put_user() that will improve things, but doing a > > user_access_begin(); > > .. do unsafe_get/put_user() .. > > user_access_end(); > > that will improve performance. > > But it is *very* seldom useful. We have it in a handful of places in > the kernel, and the most noticeable one is > lib/{strnlen,strncpy_from}_user.c
Also, __get_user() is probably going to become the same as get_user() when I finish the Spectre v1 ARM mitigations, because there'll be no point in __get_user() being any different. For those mitigations, we're going to have to check the pointer against the address limit inside __get_user() and NULL it out, just like get_user() does, which makes the whole distinction between the two completely pointless.
Is this not also the case on other architectures affected by Spectre variant 1, hmm?
-- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 13.8Mbps down 630kbps up According to speedtest.net: 13Mbps down 490kbps up
| |