Re: [systemd-devel] BTI interaction between seccomp filters in systemd and glibc mprotect calls, causing service failures
From: Szabolcs Nagy
Date: Thu Oct 22 2020 - 04:29:32 EST
The 10/22/2020 11:17, Topi Miettinen via Libc-alpha wrote:
> On 22.10.2020 10.54, Florian Weimer wrote:
> > * Lennart Poettering:
> > > Did you see Topi's comments on the systemd issue?
> > >
> > > https://github.com/systemd/systemd/issues/17368#issuecomment-710485532
> > >
> > > I think I agree with this: it's a bit weird to alter the bits after
> > > the fact. Can't glibc set up everything right from the begining? That
> > > would keep both concepts working.
> >
> > The dynamic loader has to process the LOAD segments to get to the ELF
> > note that says to enable BTI. Maybe we could do a first pass and load
> > only the segments that cover notes. But that requires lots of changes
> > to generic code in the loader.
>
> What if the loader always enabled BTI for PROT_EXEC pages, but then when
> discovering that this was a mistake, mprotect() the pages without BTI? Then
> both BTI and MDWX would work and the penalty of not getting MDWX would fall
> to non-BTI programs. What's the expected proportion of BTI enabled code vs.
> disabled in the future, is it perhaps expected that a distro would enable
> the flag globally so eventually only a few legacy programs might be
> unprotected?
i thought mprotect(PROT_EXEC) would get filtered
with or without bti, is that not the case?
then i guess we can do the protection that way
around, but then i don't see why the filter cannot
treat PROT_EXEC|PROT_BTI the same as PROT_EXEC.