cherry-pick file-mode fix from 2.0.3-staging
the patch fixes a potential panic on systems running ZFS > 2.0.0 and is already queued for inclusion in 2.0.3 - see [0] for a related github issue. [0] https://github.com/openzfs/zfs/issues/11474 Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
parent
224ca2e1b4
commit
387483f555
39
debian/patches/0010-Set-file-mode-during-zfs_write.patch
vendored
Normal file
39
debian/patches/0010-Set-file-mode-during-zfs_write.patch
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Russo <aerusso@aerusso.net>
|
||||
Date: Mon, 8 Feb 2021 10:15:05 -0700
|
||||
Subject: [PATCH] Set file mode during zfs_write
|
||||
|
||||
3d40b65 refactored zfs_vnops.c, which shared much code verbatim between
|
||||
Linux and BSD. After a successful write, the suid/sgid bits are reset,
|
||||
and the mode to be written is stored in newmode. On Linux, this was
|
||||
propagated to both the in-memory inode and znode, which is then updated
|
||||
with sa_update.
|
||||
|
||||
3d40b65 accidentally removed the initialization of newmode, which
|
||||
happened to occur on the same line as the inode update (which has been
|
||||
moved out of the function).
|
||||
|
||||
The uninitialized newmode can be saved to disk, leading to a crash on
|
||||
stat() of that file, in addition to a merely incorrect file mode.
|
||||
|
||||
Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
|
||||
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||
Signed-off-by: Antonio Russo <aerusso@aerusso.net>
|
||||
Closes #11474
|
||||
Closes #11576
|
||||
---
|
||||
module/zfs/zfs_vnops.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c
|
||||
index 17ea788f3..e54488882 100644
|
||||
--- a/module/zfs/zfs_vnops.c
|
||||
+++ b/module/zfs/zfs_vnops.c
|
||||
@@ -528,6 +528,7 @@ zfs_write(znode_t *zp, uio_t *uio, int ioflag, cred_t *cr)
|
||||
((zp->z_mode & S_ISUID) != 0 && uid == 0)) != 0) {
|
||||
uint64_t newmode;
|
||||
zp->z_mode &= ~(S_ISUID | S_ISGID);
|
||||
+ newmode = zp->z_mode;
|
||||
(void) sa_update(zp->z_sa_hdl, SA_ZPL_MODE(zfsvfs),
|
||||
(void *)&newmode, sizeof (uint64_t), tx);
|
||||
}
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
@ -7,3 +7,4 @@
|
||||
0007-Use-installed-python3.patch
|
||||
0008-Add-systemd-unit-for-importing-specific-pools.patch
|
||||
0009-Patch-move-manpage-arcstat-1-to-arcstat-8.patch
|
||||
0010-Set-file-mode-during-zfs_write.patch
|
||||
|
Loading…
Reference in New Issue
Block a user