Re: [RFC PATCH v1 1/2] fs: Add O_DENY_WRITE
From: Mickaël Salaün <mic@digikod.net>
Date: 2025-08-24 11:03:24
Also in:
linux-api, linux-fsdevel, linux-integrity, lkml
On Fri, Aug 22, 2025 at 09:45:32PM +0200, Jann Horn wrote:
On Fri, Aug 22, 2025 at 7:08 PM Mickaël Salaün [off-list ref] wrote:quoted
Add a new O_DENY_WRITE flag usable at open time and on opened file (e.g. passed file descriptors). This changes the state of the opened file by making it read-only until it is closed. The main use case is for script interpreters to get the guarantee that script' content cannot be altered while being read and interpreted. This is useful for generic distros that may not have a write-xor-execute policy. See commit a5874fde3c08 ("exec: Add a new AT_EXECVE_CHECK flag to execveat(2)") Both execve(2) and the IOCTL to enable fsverity can already set this property on files with deny_write_access(). This new O_DENY_WRITE makeThe kernel actually tried to get rid of this behavior on execve() in commit 2a010c41285345da60cece35575b4e0af7e7bf44.; but sadly that had to be reverted in commit 3b832035387ff508fdcf0fba66701afc78f79e3d because it broke userspace assumptions.
Oh, good to know.
quoted
it widely available. This is similar to what other OSs may provide e.g., opening a file with only FILE_SHARE_READ on Windows.We used to have the analogous mmap() flag MAP_DENYWRITE, and that was removed for security reasons; as https://man7.org/linux/man-pages/man2/mmap.2.html says: | MAP_DENYWRITE | This flag is ignored. (Long ago—Linux 2.0 and earlier—it | signaled that attempts to write to the underlying file | should fail with ETXTBSY. But this was a source of denial- | of-service attacks.)" It seems to me that the same issue applies to your patch - it would allow unprivileged processes to essentially lock files such that other processes can't write to them anymore. This might allow unprivileged users to prevent root from updating config files or stuff like that if they're updated in-place.
Yes, I agree, but since it is the case for executed files I though it was worth starting a discussion on this topic. This new flag could be restricted to executable files, but we should avoid system-wide locks like this. I'm not sure how Windows handle these issues though. Anyway, we should rely on the access control policy to control write and execute access in a consistent way (e.g. write-xor-execute). Thanks for the references and the background!