Thread (29 messages) 29 messages, 8 authors, 2019-09-09

Re: [PATCH v2 1/5] fs: Add support for an O_MAYEXEC flag on sys_open()

From: Aleksa Sarai <hidden>
Date: 2019-09-06 17:14:06
Also in: linux-fsdevel, linux-security-module, lkml

Possibly related (same subject, not in this thread)

On 2019-09-06, Jeff Layton [off-list ref] wrote:
On Fri, 2019-09-06 at 18:06 +0200, Mickaël Salaün wrote:
quoted
On 06/09/2019 17:56, Florian Weimer wrote:
quoted
Let's assume I want to add support for this to the glibc dynamic loader,
while still being able to run on older kernels.

Is it safe to try the open call first, with O_MAYEXEC, and if that fails
with EINVAL, try again without O_MAYEXEC?
The kernel ignore unknown open(2) flags, so yes, it is safe even for
older kernel to use O_MAYEXEC.
Well...maybe. What about existing programs that are sending down bogus
open flags? Once you turn this on, they may break...or provide a way to
circumvent the protections this gives.
It should be noted that this has been a valid concern for every new O_*
flag introduced (and yet we still introduced new flags, despite the
concern) -- though to be fair, O_TMPFILE actually does have a
work-around with the O_DIRECTORY mask setup.

The openat2() set adds O_EMPTYPATH -- though in fairness it's also
backwards compatible because empty path strings have always given ENOENT
(or EINVAL?) while O_EMPTYPATH is a no-op non-empty strings.
Maybe this should be a new flag that is only usable in the new openat2()
syscall that's still under discussion? That syscall will enforce that
all flags are recognized. You presumably wouldn't need the sysctl if you
went that route too.
I'm also interested in whether we could add an UPGRADE_NOEXEC flag to
how->upgrade_mask for the openat2(2) patchset (I reserved a flag bit for
it, since I'd heard about this work through the grape-vine).

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help