Neuter fuse_vptofh() and fuse_fhtovp(). I implemented those functions
authornatano <natano@openbsd.org>
Mon, 15 Aug 2016 07:39:46 +0000 (07:39 +0000)
committernatano <natano@openbsd.org>
Mon, 15 Aug 2016 07:39:46 +0000 (07:39 +0000)
under the assumption, that fuse_vget() has reasonable semantics, while
this is not the case. fusefs_vget() only functions correctly, if the
file in questions has recently been accessed and is still in the vnode
cache of the userspace daemon associated with the mount point.

As a matter of fact the fuse api doesn't feature a reasonable way to map
inode numbers to a handle at all (see struct fuse_operations).

ok guenther

sys/miscfs/fuse/fuse_vfsops.c

index 162860c..9780f07 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: fuse_vfsops.c,v 1.25 2016/08/13 11:42:46 natano Exp $ */
+/* $OpenBSD: fuse_vfsops.c,v 1.26 2016/08/15 07:39:46 natano Exp $ */
 /*
  * Copyright (c) 2012-2013 Sylvestre Gallon <ccna.syl@gmail.com>
  *
@@ -300,28 +300,13 @@ retry:
 int
 fusefs_fhtovp(struct mount *mp, struct fid *fhp, struct vnode **vpp)
 {
-       struct ufid *ufhp;
-
-       ufhp = (struct ufid *)fhp;
-       if (ufhp->ufid_len != sizeof(struct ufid) ||
-           ufhp->ufid_ino < FUSE_ROOTINO)
-               return (ESTALE);
-
-       return (VFS_VGET(mp, ufhp->ufid_ino, vpp));
+       return (EINVAL);
 }
 
 int
 fusefs_vptofh(struct vnode *vp, struct fid *fhp)
 {
-       struct fusefs_node *ip;
-       struct ufid *ufhp;
-
-       ip = VTOI(vp);
-       ufhp = (struct ufid *)fhp;
-       ufhp->ufid_len = sizeof(struct ufid);
-       ufhp->ufid_ino = ip->ufs_ino.i_number;
-
-       return (0);
+       return (EINVAL);
 }
 
 int