On Tue, Dec 19, 2017 at 09:42:11AM +0000, Tsimbalist, Igor V wrote:
> > I don't see any discussion in the bugzilla issue to explain this.
> 
> This option is needed to support  two cases:
> 
> 1. Compilation of ucontext functions inside glibc. To have glibc itself be CET
> compatible all files comprises the library has to be CET compatible. That 
> means
> the module with ucontext functions from glibc has to be forced to be CET
> compatible.
> 
> 2. Compilation of a user application with ucontext functions. In this case the
> error has to be issued, so no usage of a ucontext functions.
> 
> Having just __SHSTK__ macro it's impossible to handle both cases. The case
> #1 will report an error during glibc compilation. A new macro is introduced to
> use in the source to handle these cases. To control the value of the new macro
> a new option is introduced.

That doesn't make sense.  Just add

#if defined(__SHSTK__) && !defined(_LIBC)
#define __UCONTEXT_UNSUPPORTED \
  __attribute__((__error__ ("-mshstk incompatible with ucontext.h APIs")))
#else
#define __UCONTEXT_UNSUPPORTED
#endif

and use __UCONTEXT_UNSUPPORTED on the 4 function declarations, you'll be
able to compile glibc itself, but not something against it.

Have you considered implementing these 4 functions or some helper they could
use in the kernel if CET is enabled and doing there with the shadow stack
whatever is needed?

        Jakub

Reply via email to