Re: [RFC PATCH for 4.18 3/5] rseq: uapi: declare rseq_cs field as union, update includes
From: Russell King - ARM Linux <linux@armlinux.org.uk>
Date: 2018-07-07 15:07:14
Also in:
lkml
On Fri, Jul 06, 2018 at 12:56:58PM -0700, Linus Torvalds wrote:
On Fri, Jul 6, 2018 at 12:38 PM Mathieu Desnoyers [off-list ref] wrote:quoted
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