kernel_optimize_test/arch
Dan Williams c7f631cb07 x86/get_user: Use pointer masking to limit speculation
Quoting Linus:

    I do think that it would be a good idea to very expressly document
    the fact that it's not that the user access itself is unsafe. I do
    agree that things like "get_user()" want to be protected, but not
    because of any direct bugs or problems with get_user() and friends,
    but simply because get_user() is an excellent source of a pointer
    that is obviously controlled from a potentially attacking user
    space. So it's a prime candidate for then finding _subsequent_
    accesses that can then be used to perturb the cache.

Unlike the __get_user() case get_user() includes the address limit check
near the pointer de-reference. With that locality the speculation can be
mitigated with pointer narrowing rather than a barrier, i.e.
array_index_nospec(). Where the narrowing is performed by:

	cmp %limit, %ptr
	sbb %mask, %mask
	and %mask, %ptr

With respect to speculation the value of %ptr is either less than %limit
or NULL.

Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: Kees Cook <keescook@chromium.org>
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727417469.33451.11804043010080838495.stgit@dwillia2-desk3.amr.corp.intel.com
2018-01-30 21:54:31 +01:00
..
alpha alpha/PCI: Fix noname IRQ level detection 2018-01-20 16:22:36 -08:00
arc ARC fixes for 4.15-rc7 2018-01-05 16:06:35 -08:00
arm ARM: SoC fixes for 4.15 2018-01-19 11:21:31 -08:00
arm64 KVM fixes for v4.15-rc9 2018-01-20 11:41:09 -08:00
blackfin
c6x
cris
frv
h8300
hexagon
ia64 ia64: Rewrite atomic_add and atomic_sub 2018-01-19 10:47:51 -08:00
m32r kernel/exit.c: export abort() to modules 2018-01-04 16:45:09 -08:00
m68k
metag
microblaze
mips MIPS: Fix undefined reference to physical_memsize 2018-01-18 20:44:29 +00:00
mn10300
nios2
openrisc
parisc parisc: qemu idle sleep support 2018-01-06 12:28:04 +01:00
powerpc KVM fixes for v4.15-rc9 2018-01-20 11:41:09 -08:00
riscv riscv: rename SR_* constants to match the spec 2018-01-07 15:14:39 -08:00
s390 KVM: s390: another fix for cmma migration 2018-01-24 16:25:53 +01:00
score
sh SolutionEngine771x: add Ether TSU resource 2018-01-09 12:21:14 -05:00
sparc sparc64: fix typo in CONFIG_CRYPTO_DES_SPARC64 => CONFIG_CRYPTO_CAMELLIA_SPARC64 2018-01-24 16:47:55 -05:00
tile
um Merge branch 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-12-23 11:53:04 -08:00
unicore32 kernel/exit.c: export abort() to modules 2018-01-04 16:45:09 -08:00
x86 x86/get_user: Use pointer masking to limit speculation 2018-01-30 21:54:31 +01:00
xtensa
.gitignore
Kconfig