Commit e97267cb authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Greg Kroah-Hartman

tty: vt_ioctl: fix potential Spectre v1

vsa.console is indirectly 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:

drivers/tty/vt/vt_ioctl.c:711 vt_ioctl() warn: potential spectre issue
'vc_cons' [r]

Fix this by sanitizing vsa.console before using it to index vc_cons

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: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
Reviewed-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fe324167
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#include <asm/io.h> #include <asm/io.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/nospec.h>
#include <linux/kbd_kern.h> #include <linux/kbd_kern.h>
#include <linux/vt_kern.h> #include <linux/vt_kern.h>
#include <linux/kbd_diacr.h> #include <linux/kbd_diacr.h>
...@@ -700,6 +702,8 @@ int vt_ioctl(struct tty_struct *tty, ...@@ -700,6 +702,8 @@ int vt_ioctl(struct tty_struct *tty,
if (vsa.console == 0 || vsa.console > MAX_NR_CONSOLES) if (vsa.console == 0 || vsa.console > MAX_NR_CONSOLES)
ret = -ENXIO; ret = -ENXIO;
else { else {
vsa.console = array_index_nospec(vsa.console,
MAX_NR_CONSOLES + 1);
vsa.console--; vsa.console--;
console_lock(); console_lock();
ret = vc_allocate(vsa.console); ret = vc_allocate(vsa.console);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment