This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: [PATCH 0/5] x86: CVE-2017-5715, aka Spectre
- From: "Kumar, Venkataramanan" <Venkataramanan dot Kumar at amd dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: "Dharmakan, Rohit arul raj" <Rohitarulraj dot Dharmakan at amd dot com>, "Nagarajan, Muthu kumar raj" <Muthukumarraj dot Nagarajan at amd dot com>, "Uros Bizjak (ubizjak at gmail dot com)" <ubizjak at gmail dot com>, "Jan Hubicka (hubicka at ucw dot cz)" <hubicka at ucw dot cz>
- Date: Sun, 14 Jan 2018 06:10:12 +0000
- Subject: RE: [PATCH 0/5] x86: CVE-2017-5715, aka Spectre
- Authentication-results: sourceware.org; auth=none
- Authentication-results: spf=none (sender IP is ) smtp.mailfrom=Venkataramanan dot Kumar at amd dot com;
- References: <20180114033707.6297-1-hjl.tools@gmail.com>
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
Hi HJ,
> -----Original Message-----
> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
> owner@gcc.gnu.org] On Behalf Of H.J. Lu
> Sent: Sunday, January 14, 2018 9:07 AM
> To: gcc-patches@gcc.gnu.org
> Subject: [PATCH 0/5] x86: CVE-2017-5715, aka Spectre
>
> This set of patches for GCC 8 mitigates variant #2 of the speculative
> execution vulnerabilities on x86 processors identified by CVE-2017-5715, aka
> Spectre. They convert indirect branches and function returns to call and
> return thunks to avoid speculative execution via indirect call, jmp and ret.
>
> H.J. Lu (5):
> x86: Add -mindirect-branch=
> x86: Add -mfunction-return=
> x86: Add -mindirect-branch-register
> x86: Add 'V' register operand modifier
> x86: Disallow -mindirect-branch=/-mfunction-return= with
> -mcmodel=large
Current set of patches don't seem to have any option to generate "lfence" as the loop filler in "retpoline", which is required by AMD.
Can you please clarify the plan. We would like to get this checked-in GCC 8.
>
> gcc/config/i386/constraints.md | 12 +-
> gcc/config/i386/i386-opts.h | 13 +
> gcc/config/i386/i386-protos.h | 2 +
> gcc/config/i386/i386.c | 822 ++++++++++++++++++++-
> gcc/config/i386/i386.h | 10 +
> gcc/config/i386/i386.md | 69 +-
> gcc/config/i386/i386.opt | 28 +
> gcc/config/i386/predicates.md | 21 +-
> gcc/doc/extend.texi | 22 +
> gcc/doc/invoke.texi | 41 +-
> gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 19 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 19 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 20 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 20 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 16 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 17 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 43 ++
> gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 +
> gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 +
> .../gcc.target/i386/indirect-thunk-attr-1.c | 22 +
> .../gcc.target/i386/indirect-thunk-attr-10.c | 9 +
> .../gcc.target/i386/indirect-thunk-attr-11.c | 9 +
> .../gcc.target/i386/indirect-thunk-attr-2.c | 20 +
> .../gcc.target/i386/indirect-thunk-attr-3.c | 21 +
> .../gcc.target/i386/indirect-thunk-attr-4.c | 20 +
> .../gcc.target/i386/indirect-thunk-attr-5.c | 22 +
> .../gcc.target/i386/indirect-thunk-attr-6.c | 21 +
> .../gcc.target/i386/indirect-thunk-attr-7.c | 44 ++
> .../gcc.target/i386/indirect-thunk-attr-8.c | 41 +
> .../gcc.target/i386/indirect-thunk-attr-9.c | 9 +
> .../gcc.target/i386/indirect-thunk-bnd-1.c | 19 +
> .../gcc.target/i386/indirect-thunk-bnd-2.c | 20 +
> .../gcc.target/i386/indirect-thunk-bnd-3.c | 18 +
> .../gcc.target/i386/indirect-thunk-bnd-4.c | 19 +
> .../gcc.target/i386/indirect-thunk-extern-1.c | 19 +
> .../gcc.target/i386/indirect-thunk-extern-2.c | 19 +
> .../gcc.target/i386/indirect-thunk-extern-3.c | 20 +
> .../gcc.target/i386/indirect-thunk-extern-4.c | 20 +
> .../gcc.target/i386/indirect-thunk-extern-5.c | 16 +
> .../gcc.target/i386/indirect-thunk-extern-6.c | 17 +
> .../gcc.target/i386/indirect-thunk-extern-7.c | 43 ++
> .../gcc.target/i386/indirect-thunk-inline-1.c | 18 +
> .../gcc.target/i386/indirect-thunk-inline-2.c | 18 +
> .../gcc.target/i386/indirect-thunk-inline-3.c | 19 +
> .../gcc.target/i386/indirect-thunk-inline-4.c | 19 +
> .../gcc.target/i386/indirect-thunk-inline-5.c | 15 +
> .../gcc.target/i386/indirect-thunk-inline-6.c | 16 +
> .../gcc.target/i386/indirect-thunk-inline-7.c | 42 ++
> .../gcc.target/i386/indirect-thunk-register-1.c | 22 +
> .../gcc.target/i386/indirect-thunk-register-2.c | 20 +
> .../gcc.target/i386/indirect-thunk-register-3.c | 19 +
> .../gcc.target/i386/indirect-thunk-register-4.c | 13 +
> gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 12 +
> gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 22 +
> gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 22 +
> gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 21 +
> gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 21 +
> gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 21 +
> gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 21 +
> gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 +
> gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 +
> gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +
> gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +
> gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 12 +
> gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 +
> gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 +
> gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 +
> gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 +
> gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 14 +
> gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 13 +
> gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 +
> gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 +
> gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 23 +
> 74 files changed, 2166 insertions(+), 50 deletions(-) create mode 100644
> gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-
> 1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-
> 2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-
> 3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-
> 4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c
> create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c
>
> --
> 2.14.3
Regards,
Venkat.