Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/freebsd/freebsd-src.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2022-10-24 18:55:48 +0300
committerMark Johnston <markj@FreeBSD.org>2022-11-01 16:28:11 +0300
commit7ab877cb3f9d55a394e43a2c1a1e2711df12226d (patch)
treef04f44da703ee93316c98635add07f19a85296be
parent752f813d6ccc40c5b7b79d7fb87da453422d6417 (diff)
zfs: Fix a pair of bugs in zfs_fhtovp()
This cherry-picks upstream ed566bf1cd0bdbf85e8c63c1c119e3d2ef5db1f6 - Add a zfs_exit() call in an error path, otherwise a lock is leaked. - Remove the fid_gen > 1 check. That appears to be Linux-specific: zfsctl_snapdir_fid() sets fid_gen to 0 or 1 depending on whether the snapshot directory is mounted. On FreeBSD it fails, making snapshot dirs inaccessible via NFS. Approved by: so PR: 266236 Security: FreeBSD-EN-22:24.zfs (cherry picked from commit 6fe0a6c80a1aff14236924eb33e4013aa8c14f91) (cherry picked from commit 562c9ac58c7678b13f52b0bfe63148e40d7bf63d)
-rw-r--r--sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c
index cdd762dcbcbf..05d41d4e3b2a 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c
@@ -1845,7 +1845,8 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp)
return (SET_ERROR(EINVAL));
}
- if (fidp->fid_len == LONG_FID_LEN && (fid_gen > 1 || setgen != 0)) {
+ if (fidp->fid_len == LONG_FID_LEN && setgen != 0) {
+ ZFS_EXIT(zfsvfs);
dprintf("snapdir fid: fid_gen (%llu) and setgen (%llu)\n",
(u_longlong_t)fid_gen, (u_longlong_t)setgen);
return (SET_ERROR(EINVAL));