]> git.baikalelectronics.ru Git - kernel.git/commit
x86: uaccess: Inhibit speculation past access_ok() in user_access_begin()
authorWill Deacon <will.deacon@arm.com>
Sat, 19 Jan 2019 21:56:05 +0000 (21:56 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 20 Jan 2019 03:33:22 +0000 (15:33 +1200)
commit1eaf4d789add7e79a29fd520addb715b173e39e4
tree3e46191be19e74dc996c422c03b22aa7818c0870
parentef686a0c3099f04d525a337620f5122ac8e9d0f1
x86: uaccess: Inhibit speculation past access_ok() in user_access_begin()

Commit e111b200d102 ("make 'user_access_begin()' do 'access_ok()'")
makes the access_ok() check part of the user_access_begin() preceding a
series of 'unsafe' accesses.  This has the desirable effect of ensuring
that all 'unsafe' accesses have been range-checked, without having to
pick through all of the callsites to verify whether the appropriate
checking has been made.

However, the consolidated range check does not inhibit speculation, so
it is still up to the caller to ensure that they are not susceptible to
any speculative side-channel attacks for user addresses that ultimately
fail the access_ok() check.

This is an oversight, so use __uaccess_begin_nospec() to ensure that
speculation is inhibited until the access_ok() check has passed.

Reported-by: Julien Thierry <julien.thierry@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/include/asm/uaccess.h