mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Intentionally allow ZFS_READONLY in zfs_write
ZFS_READONLY represents the "DOS R/O" attribute. When that flag is set, we should behave as if write access were not granted by anything in the ACL. In particular: We _must_ allow writes after opening the file r/w, then setting the DOS R/O attribute, and writing some more. (Similar to how you can write after fchmod(fd, 0444).) Restore these semantics which were lost on FreeBSD when refactoring zfs_write. To my knowledge Linux does not actually expose this flag, but we'll need it to eventually so I've added the supporting checks. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #11693
This commit is contained in:
committed by
Brian Behlendorf
parent
df8271301e
commit
cda6fdd500
@@ -258,9 +258,11 @@ zfs_write(znode_t *zp, uio_t *uio, int ioflag, cred_t *cr)
|
||||
}
|
||||
|
||||
/*
|
||||
* If immutable or not appending then return EPERM
|
||||
* If immutable or not appending then return EPERM.
|
||||
* Intentionally allow ZFS_READONLY through here.
|
||||
* See zfs_zaccess_common()
|
||||
*/
|
||||
if ((zp->z_pflags & (ZFS_IMMUTABLE | ZFS_READONLY)) ||
|
||||
if ((zp->z_pflags & ZFS_IMMUTABLE) ||
|
||||
((zp->z_pflags & ZFS_APPENDONLY) && !(ioflag & O_APPEND) &&
|
||||
(uio->uio_loffset < zp->z_size))) {
|
||||
ZFS_EXIT(zfsvfs);
|
||||
|
||||
Reference in New Issue
Block a user