From: Lennart Poettering <mzxreary@0pointer.de>
To: Szabolcs Nagy <szabolcs.nagy@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
systemd-devel@lists.freedesktop.org,
Kees Cook <keescook@chromium.org>,
Catalin Marinas <Catalin.Marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Jeremy Linton <jeremy.linton@arm.com>,
Mark Brown <broonie@kernel.org>,
libc-alpha@sourceware.org, Dave Martin <dave.martin@arm.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [systemd-devel] BTI interaction between seccomp filters in systemd and glibc mprotect calls, causing service failures
Date: Thu, 22 Oct 2020 10:31:46 +0200 [thread overview]
Message-ID: <20201022083146.GA324761@gardel-login> (raw)
In-Reply-To: <20201022080548.GP3819@arm.com>
On Do, 22.10.20 09:05, Szabolcs Nagy (szabolcs.nagy@arm.com) wrote:
> > > Various changes have been suggested, replacing the mprotect with mmap calls
> > > having PROT_BTI set on the original mapping, re-mmapping the segments,
> > > implying PROT_EXEC on mprotect PROT_BTI calls when VM_EXEC is already set,
> > > and various modification to seccomp to allow particular mprotect cases to
> > > bypass the filters. In each case there seems to be an undesirable attribute
> > > to the solution.
> > >
> > > So, whats the best solution?
> >
> > 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.
>
> that's hard to do and does not work for the main exe currently
> (which is mmaped by the kernel).
>
> (it's hard to do because to know that the elf module requires
> bti the PT_GNU_PROPERTY notes have to be accessed that are
> often in the executable load segment, so either you mmap that
> or have to read that, but the latter has a lot more failure
> modes, so if i have to get the mmap flags right i'd do a mmap
> and then re-mmap if the flags were not right)
Only other option I then see is to neuter one of the two
mechanisms. We could certainly turn off MDWE on arm in systemd, if
people want that. Or make it a build-time choice, so that distros make
the choice: build everything with BTI xor suppport MDWE.
(Might make sense for glibc to gracefully fallback to non-BTI mode if
the mprotect() fails though, to make sure BTI-built binaries work
everywhere.)
I figure your interest in ARM system security is bigger than mine. I
am totally fine to turn off MDWE on ARM if that's what the Linux ARM
folks want. I ave no horse in the race. Just let me know.
[An acceptable compromise might be to allow
mprotect(PROT_EXEC|PROT_BTI) if MDWE is on, but prohibit
mprotect(PROT_EXEC) without PROT_BTI. Then at least you get one of the
two protections, but not both. I mean, MDWE is not perfect anyway on
non-x86-64 already: on 32bit i386 MDWE protection is not complete, due
to ipc() syscall multiplexing being unmatchable with seccomp. I
personally am happy as long as it works fully on x86-64]
Lennart
--
Lennart Poettering, Berlin
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Lennart Poettering <mzxreary@0pointer.de>
To: Szabolcs Nagy <szabolcs.nagy@arm.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
libc-alpha@sourceware.org, systemd-devel@lists.freedesktop.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Kees Cook <keescook@chromium.org>,
Catalin Marinas <Catalin.Marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Mark Brown <broonie@kernel.org>,
Dave Martin <dave.martin@arm.com>
Subject: Re: [systemd-devel] BTI interaction between seccomp filters in systemd and glibc mprotect calls, causing service failures
Date: Thu, 22 Oct 2020 10:31:46 +0200 [thread overview]
Message-ID: <20201022083146.GA324761@gardel-login> (raw)
In-Reply-To: <20201022080548.GP3819@arm.com>
On Do, 22.10.20 09:05, Szabolcs Nagy (szabolcs.nagy@arm.com) wrote:
> > > Various changes have been suggested, replacing the mprotect with mmap calls
> > > having PROT_BTI set on the original mapping, re-mmapping the segments,
> > > implying PROT_EXEC on mprotect PROT_BTI calls when VM_EXEC is already set,
> > > and various modification to seccomp to allow particular mprotect cases to
> > > bypass the filters. In each case there seems to be an undesirable attribute
> > > to the solution.
> > >
> > > So, whats the best solution?
> >
> > 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.
>
> that's hard to do and does not work for the main exe currently
> (which is mmaped by the kernel).
>
> (it's hard to do because to know that the elf module requires
> bti the PT_GNU_PROPERTY notes have to be accessed that are
> often in the executable load segment, so either you mmap that
> or have to read that, but the latter has a lot more failure
> modes, so if i have to get the mmap flags right i'd do a mmap
> and then re-mmap if the flags were not right)
Only other option I then see is to neuter one of the two
mechanisms. We could certainly turn off MDWE on arm in systemd, if
people want that. Or make it a build-time choice, so that distros make
the choice: build everything with BTI xor suppport MDWE.
(Might make sense for glibc to gracefully fallback to non-BTI mode if
the mprotect() fails though, to make sure BTI-built binaries work
everywhere.)
I figure your interest in ARM system security is bigger than mine. I
am totally fine to turn off MDWE on ARM if that's what the Linux ARM
folks want. I ave no horse in the race. Just let me know.
[An acceptable compromise might be to allow
mprotect(PROT_EXEC|PROT_BTI) if MDWE is on, but prohibit
mprotect(PROT_EXEC) without PROT_BTI. Then at least you get one of the
two protections, but not both. I mean, MDWE is not perfect anyway on
non-x86-64 already: on 32bit i386 MDWE protection is not complete, due
to ipc() syscall multiplexing being unmatchable with seccomp. I
personally am happy as long as it works fully on x86-64]
Lennart
--
Lennart Poettering, Berlin
next prev parent reply other threads:[~2020-10-22 8:33 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <8584c14f-5c28-9d70-c054-7c78127d84ea@arm.com>
2020-10-22 7:18 ` [systemd-devel] BTI interaction between seccomp filters in systemd and glibc mprotect calls, causing service failures Lennart Poettering
2020-10-22 7:18 ` Lennart Poettering
2020-10-22 7:54 ` Florian Weimer
2020-10-22 7:54 ` Florian Weimer
2020-10-22 8:17 ` Topi Miettinen
2020-10-22 8:17 ` Topi Miettinen
2020-10-22 8:25 ` Florian Weimer
2020-10-22 8:25 ` Florian Weimer
2020-10-22 8:29 ` Szabolcs Nagy
2020-10-22 8:29 ` Szabolcs Nagy
2020-10-22 8:38 ` Lennart Poettering
2020-10-22 8:38 ` Lennart Poettering
2020-10-22 9:31 ` Catalin Marinas
2020-10-22 9:31 ` Catalin Marinas
2020-10-22 10:12 ` Topi Miettinen
2020-10-22 10:12 ` Topi Miettinen
2020-10-22 10:27 ` Florian Weimer
2020-10-22 10:27 ` Florian Weimer
2020-10-23 6:13 ` Szabolcs Nagy
2020-10-23 6:13 ` Szabolcs Nagy
2020-10-23 9:04 ` Catalin Marinas
2020-10-23 9:04 ` Catalin Marinas
2020-10-22 10:03 ` Topi Miettinen
2020-10-22 10:03 ` Topi Miettinen
2020-10-22 8:05 ` Szabolcs Nagy
2020-10-22 8:05 ` Szabolcs Nagy
2020-10-22 8:31 ` Lennart Poettering [this message]
2020-10-22 8:31 ` Lennart Poettering
[not found] ` <20201022075447.GO3819@arm.com>
2020-10-22 10:39 ` Topi Miettinen
2020-10-22 10:39 ` Topi Miettinen
2020-10-22 20:02 ` Kees Cook
2020-10-22 20:02 ` Kees Cook
2020-10-22 22:24 ` Topi Miettinen
2020-10-22 22:24 ` Topi Miettinen
2020-10-23 17:52 ` Salvatore Mesoraca
2020-10-23 17:52 ` Salvatore Mesoraca
2020-10-24 11:34 ` Topi Miettinen
2020-10-24 11:34 ` Topi Miettinen
2020-10-24 14:12 ` Salvatore Mesoraca
2020-10-24 14:12 ` Salvatore Mesoraca
2020-10-25 13:42 ` Jordan Glover
2020-10-25 13:42 ` Jordan Glover
2020-10-23 9:02 ` Catalin Marinas
2020-10-23 9:02 ` Catalin Marinas
2020-10-24 11:01 ` Topi Miettinen
2020-10-24 11:01 ` Topi Miettinen
2020-10-26 14:52 ` Catalin Marinas
2020-10-26 14:52 ` Catalin Marinas
2020-10-26 15:56 ` Dave Martin
2020-10-26 15:56 ` Dave Martin
2020-10-26 16:51 ` Mark Brown
2020-10-26 16:51 ` Mark Brown
2020-10-26 16:31 ` Topi Miettinen
2020-10-26 16:31 ` Topi Miettinen
2020-10-26 16:24 ` Dave Martin
2020-10-26 16:24 ` Dave Martin
2020-10-26 16:39 ` Topi Miettinen
2020-10-26 16:39 ` Topi Miettinen
2020-10-26 16:45 ` Florian Weimer
2020-10-26 16:45 ` Florian Weimer
2020-10-27 14:22 ` Dave Martin
2020-10-27 14:22 ` Dave Martin
2020-10-27 14:41 ` Florian Weimer
2020-10-27 14:41 ` Florian Weimer
2020-10-26 16:57 ` Szabolcs Nagy
2020-10-26 16:57 ` Szabolcs Nagy
2020-10-26 17:52 ` Dave Martin
2020-10-26 17:52 ` Dave Martin
2020-10-26 22:39 ` Jeremy Linton
2020-10-26 22:39 ` Jeremy Linton
2020-10-27 14:15 ` Dave Martin
2020-10-27 14:15 ` Dave Martin
2020-10-29 11:02 ` Catalin Marinas
2020-10-29 11:02 ` Catalin Marinas
2020-11-04 12:18 ` Dave Martin
2020-11-04 12:18 ` Dave Martin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201022083146.GA324761@gardel-login \
--to=mzxreary@0pointer.de \
--cc=Catalin.Marinas@arm.com \
--cc=broonie@kernel.org \
--cc=dave.martin@arm.com \
--cc=jeremy.linton@arm.com \
--cc=keescook@chromium.org \
--cc=libc-alpha@sourceware.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=systemd-devel@lists.freedesktop.org \
--cc=szabolcs.nagy@arm.com \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.