Re: [RFC PATCH v1 0/2] Add O_DENY_WRITE (complement AT_EXECVE_CHECK)
Aleksa Sarai <[email protected]> Thu, 28 Aug 2025 10:52:42 +1000
| Newsgroups | com.openwall.lists.kernel-hardening,org.kernel.vger.linux-api,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-integrity,org.kernel.vger.linux-kernel,org.kernel.vger.linux-security-module |
|---|---|
| Message-ID | <[email protected]> |
--t3uldpk5vmc35wcr Content-Type: text/plain; protected-headers=v1; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Subject: Re: [RFC PATCH v1 0/2] Add O_DENY_WRITE (complement AT_EXECVE_CHECK) MIME-Version: 1.0 On 2025-08-27, Andy Lutomirski <[email protected]> wrote: > On Wed, Aug 27, 2025 at 5:14=E2=80=AFPM Aleksa Sarai <[email protected]> = wrote: > > > > On 2025-08-26, Micka=C3=ABl Sala=C3=BCn <[email protected]> wrote: > > > On Tue, Aug 26, 2025 at 11:07:03AM +0200, Christian Brauner wrote: > > > > Nothing has changed in that regard and I'm not interested in stuffi= ng > > > > the VFS APIs full of special-purpose behavior to work around the fa= ct > > > > that this is work that needs to be done in userspace. Change the ap= ps, > > > > stop pushing more and more cruft into the VFS that has no business > > > > there. > > > > > > It would be interesting to know how to patch user space to get the sa= me > > > guarantees... Do you think I would propose a kernel patch otherwise? > > > > You could mmap the script file with MAP_PRIVATE. This is the *actual* > > protection the kernel uses against overwriting binaries (yes, ETXTBSY is > > nice but IIRC there are ways to get around it anyway). >=20 > Wait, really? MAP_PRIVATE prevents writes to the mapping from > affecting the file, but I don't think that writes to the file will > break the MAP_PRIVATE CoW if it's not already broken. Oh I guess you're right -- that's news to me. And from mmap(2): > MAP_PRIVATE > [...] It is unspecified whether changes made to the file after the > mmap() call are visible in the mapped region. But then what is the protection mechanism (in the absence of -ETXTBSY) that stops you from overwriting the live text of a binary by just writing to it? I would need to go trawling through my old scripts to find the reproducer that let you get around -ETXTBSY (I think it involved executable memfds) but I distinctly remember that even if you overwrote the binary you would not see the live process's mapped mm change value. (Ditto for the few kernels when we removed -ETXTBSY.) I found this surprising, but assumed that it was because of MAP_PRIVATE. --=20 Aleksa Sarai Senior Software Engineer (Containers) SUSE Linux GmbH https://www.cyphar.com/ --t3uldpk5vmc35wcr Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iJEEABYKADkWIQS2TklVsp+j1GPyqQYol/rSt+lEbwUCaK+oWhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDIACgkQKJf60rfpRG9YOwD+IgeIsIsIT209gc6p0UJ+ RpiujJ3PHk79u8piCbNs9GIA/2I0ge/RGvNochLLI17BW1sMdgZdclwN/rf+cUxC cnwF =FhJ0 -----END PGP SIGNATURE----- --t3uldpk5vmc35wcr--