Re: [PATCH v3 8/9] x86: use __uaccess_begin_nospec and ASM_IFENCE in get_user paths

From: Dan Williams
Date: Wed Jan 17 2018 - 13:12:17 EST


On Tue, Jan 16, 2018 at 10:50 PM, Dan Williams <dan.j.williams@xxxxxxxxx> wrote:
> On Tue, Jan 16, 2018 at 10:28 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:
[..]
>> Anything that open-codes copy_from_user() that way is *ALREADY* fucked if
>> it cares about the overhead - recent x86 boxen will have slowdown from
>> hell on stac()/clac() pairs. Anything like that on a hot path is already
>> deep in trouble and needs to be found and fixed. What drivers would those
>> be?
>
> So I took a closer look and the pattern is not copy_from_user it's
> more like __get_user + write-to-hardware loops. If the performance is
> already expected to be bad for those then perhaps an lfence each loop
> iteration won't be much worse. It's still a waste because the lfence
> is only needed once after the access_ok.
>
>> We don't have that many __get_user() users left outside of arch/*
>> anymore...

Given the concern of having something easy to backport first I think
we should start with lfence in __uaccess_begin(). Any deeper changes
to the access_ok() + __get_user calling convention can build on top of
that baseline.