When renaming a file on a FUSE file system and the target exists and is
open, a deadlock will occur because the target vnode (tvp) has not been
unlocked by fusefs_rename(). When the process that has the file open
calls close(2) the vnode will still be locked with no chance of ever
being unlocked.

ok?


Index: fuse_vnops.c
===================================================================
RCS file: /cvs/src/sys/miscfs/fuse/fuse_vnops.c,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 fuse_vnops.c
--- fuse_vnops.c        17 Nov 2017 15:45:17 -0000      1.34
+++ fuse_vnops.c        24 Nov 2017 23:20:14 -0000
@@ -1261,6 +1261,8 @@ abortit:
                vrele(tdvp);
        else
                vput(tdvp);
+       if (tvp)
+               vput(tvp);
        vrele(fdvp);
        vrele(fvp);
 

Reply via email to