summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Thierry <julien.thierry@arm.com>2019-02-14 17:49:19 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-02-20 12:18:26 +0300
commit0cb3209d8819b58ff85bee7e4cf14a5367c00c1a (patch)
treecffd9d4e99850b1d4d46f892af56b531633bf811
parentc4fa56d36e8af8376bf6f1829a16a12e3cdfb284 (diff)
downloadlinux-0cb3209d8819b58ff85bee7e4cf14a5367c00c1a.tar.xz
ARM: 8794/1: uaccess: Prevent speculative use of the current addr_limit
Commit 621afc677465db231662ed126ae1f355bf8eac47 upstream. A mispredicted conditional call to set_fs could result in the wrong addr_limit being forwarded under speculation to a subsequent access_ok check, potentially forming part of a spectre-v1 attack using uaccess routines. This patch prevents this forwarding from taking place, but putting heavy barriers in set_fs after writing the addr_limit. Porting commit c2f0ad4fc089cff8 ("arm64: uaccess: Prevent speculative use of the current addr_limit"). Signed-off-by: Julien Thierry <julien.thierry@arm.com> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David A. Long <dave.long@linaro.org> Reviewed-by: Julien Thierry <julien.thierry@arm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--arch/arm/include/asm/uaccess.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
index 7b17460127fd..9ae888775743 100644
--- a/arch/arm/include/asm/uaccess.h
+++ b/arch/arm/include/asm/uaccess.h
@@ -99,6 +99,14 @@ extern int __put_user_bad(void);
static inline void set_fs(mm_segment_t fs)
{
current_thread_info()->addr_limit = fs;
+
+ /*
+ * Prevent a mispredicted conditional call to set_fs from forwarding
+ * the wrong address limit to access_ok under speculation.
+ */
+ dsb(nsh);
+ isb();
+
modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
}