Mercurial > hg > icedtea8-forest > hotspot
changeset 9953:0458118b5f19 icedtea-3.9.0pre01
PR3607: CVE-2018-3639 hw: cpu: speculative store bypass mitigation
author | andrew |
---|---|
date | Wed, 08 Aug 2018 17:01:13 +0100 |
parents | 66087a86ded3 |
children | 8c2fa81f07e2 |
files | src/os/linux/vm/os_linux.cpp |
diffstat | 1 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os/linux/vm/os_linux.cpp Wed Jul 25 14:53:59 2018 +0100 +++ b/src/os/linux/vm/os_linux.cpp Wed Aug 08 17:01:13 2018 +0100 @@ -103,6 +103,8 @@ # include <inttypes.h> # include <sys/ioctl.h> +#include <sys/prctl.h> + PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC #ifndef _GNU_SOURCE @@ -4995,6 +4997,31 @@ } } +/* Per task speculation control */ +#ifndef PR_GET_SPECULATION_CTRL +#define PR_GET_SPECULATION_CTRL 52 +#endif +#ifndef PR_SET_SPECULATION_CTRL +#define PR_SET_SPECULATION_CTRL 53 +#endif +/* Speculation control variants */ +# undef PR_SPEC_STORE_BYPASS +# define PR_SPEC_STORE_BYPASS 0 +/* Return and control values for PR_SET/GET_SPECULATION_CTRL */ +# undef PR_SPEC_NOT_AFFECTED +# undef PR_SPEC_PRCTL +# undef PR_SPEC_ENABLE +# undef PR_SPEC_DISABLE +# define PR_SPEC_NOT_AFFECTED 0 +# define PR_SPEC_PRCTL (1UL << 0) +# define PR_SPEC_ENABLE (1UL << 1) +# define PR_SPEC_DISABLE (1UL << 2) + +static void set_speculation() __attribute__((constructor)); +static void set_speculation() { + prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0); +} + // this is called _before_ the most of global arguments have been parsed void os::init(void) { char dummy; /* used to get a guess on initial stack address */