Re: [RFC PATCH v9 01/27] Documentation/x86: Add CET description
From: H.J. Lu
Date: Mon Mar 09 2020 - 22:14:40 EST
On Mon, Mar 9, 2020 at 6:21 PM Andy Lutomirski <luto@xxxxxxxxxxxxxx> wrote:
>
> I am baffled by this discussion.
>
> >> On Mar 9, 2020, at 5:09 PM, H.J. Lu <hjl.tools@xxxxxxxxx> wrote:
> >>
> >> ïOn Mon, Mar 9, 2020 at 4:59 PM Andy Lutomirski <luto@xxxxxxxxxxxxxx> wrote:
> >
> >>>> .
> >> This could presumably have been fixed by having libpcre or sljit
> >> disable IBT before calling into JIT code or by running the JIT code in
> >> another thread. In the other direction, a non-CET libpcre build could
> >> build IBT-capable JITted code and enable JIT (by syscall if we allow
> >> that or by creating a thread?) when calling it. And IBT has this
> >
> > This is not how thread in user space works.
>
> void create_cet_thread(void (*func)(), unsigned int cet_flags);
>
> I could implement this using clone() if the kernel provides the requisite support. Sure, creating threads behind libcâs back like this is perilous, but it can be done.
Sure, this can live outside of libc with kernel support.
> >
> >> fancy legacy bitmap to allow non-instrumented code to run with IBT on,
> >> although SHSTK doesn't have hardware support for a similar feature.
> >
> > All these changes are called CET enabing.
>
> What does that mean? If program A loads library B, and library B very carefully loads CET-mismatched code, program A may be blissfully unaware.
Any source changes to make codes CET compatible is to enable CET.
Shadow stack can't be turned on or off arbitrarily. ld.so checks it and
makes sure that everything is consistent. But this is entirely done in
user space. In the first phase, we want to make CET simple, not too
complicated.
H.J.