All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kernel: sys: fix potential Spectre v1
@ 2018-05-15  3:00 Gustavo A. R. Silva
  2018-05-15 22:08 ` Andrew Morton
  0 siblings, 1 reply; 26+ messages in thread
From: Gustavo A. R. Silva @ 2018-05-15  3:00 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, Gustavo A. R. Silva

resource can be controlled by user-space, hence leading to a
potential exploitation of the Spectre variant 1 vulnerability.

This issue was detected with the help of Smatch:

kernel/sys.c:1474 __do_compat_sys_old_getrlimit() warn: potential
spectre issue 'get_current()->signal->rlim' (local cap)
kernel/sys.c:1455 __do_sys_old_getrlimit() warn: potential spectre issue
'get_current()->signal->rlim' (local cap)

Fix this by sanitizing *resource* before using it to index
current->signal->rlim

Notice that given that speculation windows are large, the policy is
to kill the speculation on the first load and not worry if it can be
completed with a dependent load/store [1].

[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2

Cc: stable@vger.kernel.org
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
---
 kernel/sys.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/kernel/sys.c b/kernel/sys.c
index 63ef036..78646e6 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -69,6 +69,9 @@
 #include <asm/io.h>
 #include <asm/unistd.h>
 
+/* Hardening for Spectre-v1 */
+#include <linux/nospec.h>
+
 #include "uid16.h"
 
 #ifndef SET_UNALIGN_CTL
@@ -1451,6 +1454,7 @@ SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource,
 	if (resource >= RLIM_NLIMITS)
 		return -EINVAL;
 
+	resource = array_index_nospec(resource, RLIM_NLIMITS);
 	task_lock(current->group_leader);
 	x = current->signal->rlim[resource];
 	task_unlock(current->group_leader);
@@ -1470,6 +1474,7 @@ COMPAT_SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource,
 	if (resource >= RLIM_NLIMITS)
 		return -EINVAL;
 
+	resource = array_index_nospec(resource, RLIM_NLIMITS);
 	task_lock(current->group_leader);
 	r = current->signal->rlim[resource];
 	task_unlock(current->group_leader);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2018-05-25 18:11 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-15  3:00 [PATCH] kernel: sys: fix potential Spectre v1 Gustavo A. R. Silva
2018-05-15 22:08 ` Andrew Morton
2018-05-15 22:29   ` Thomas Gleixner
2018-05-15 22:57     ` Dan Williams
2018-05-18 19:04       ` Gustavo A. R. Silva
2018-05-18 19:21         ` Gustavo A. R. Silva
2018-05-18 20:38           ` Dan Williams
2018-05-18 20:44             ` Gustavo A. R. Silva
2018-05-18 21:27               ` Gustavo A. R. Silva
2018-05-18 21:45                 ` Dan Williams
2018-05-18 22:01                   ` Gustavo A. R. Silva
2018-05-18 22:08                     ` Dan Williams
2018-05-18 22:11                       ` Gustavo A. R. Silva
2018-05-21  0:50               ` Gustavo A. R. Silva
2018-05-21  2:00                 ` Gustavo A. R. Silva
2018-05-22 20:50                   ` Dan Williams
2018-05-23  5:03                     ` Gustavo A. R. Silva
2018-05-23  5:15                       ` Dan Williams
2018-05-23  5:22                         ` Gustavo A. R. Silva
2018-05-23  9:08                       ` Peter Zijlstra
2018-05-23 13:55                         ` Dan Williams
2018-05-23 15:07                         ` Mark Rutland
2018-05-23 15:57                           ` Dan Williams
2018-05-23 16:27                           ` Peter Zijlstra
2018-05-23 16:31                           ` Mark Rutland
2018-05-25 18:11                             ` Gustavo A. R. Silva

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.