aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2025-10-02 21:36:23 +0200
committerJakob Unterwurzacher2025-10-02 21:42:39 +0200
commit8b33c0d6763f25be4ee5f100bbb1c67f7d485ee4 (patch)
treeae7e6b5d66653b06bb73562fa6364094cb4f4ec2
parent6651f9a761f15d5d9b1be15d47dadbe4bb424665 (diff)
fusefrontend: Mkdir: Stat after fixing permissionsHEADmaster
Fixes https://github.com/rfjakob/gocryptfs/issues/964
-rw-r--r--internal/fusefrontend/node_dir_ops.go11
1 files changed, 5 insertions, 6 deletions
diff --git a/internal/fusefrontend/node_dir_ops.go b/internal/fusefrontend/node_dir_ops.go
index 11ff83d..97327ce 100644
--- a/internal/fusefrontend/node_dir_ops.go
+++ b/internal/fusefrontend/node_dir_ops.go
@@ -136,12 +136,6 @@ func (n *Node) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.En
}
defer syscall.Close(fd)
- err = syscall.Fstat(fd, &st)
- if err != nil {
- tlog.Warn.Printf("Mkdir %q: Fstat failed: %v", cName, err)
- return nil, fs.ToErrno(err)
- }
-
// Fix permissions
if origMode != mode {
// Preserve SGID bit if it was set due to inheritance.
@@ -150,7 +144,12 @@ func (n *Node) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.En
if err != nil {
tlog.Warn.Printf("Mkdir %q: Fchmod %#o -> %#o failed: %v", cName, mode, origMode, err)
}
+ }
+ err = syscall.Fstat(fd, &st)
+ if err != nil {
+ tlog.Warn.Printf("Mkdir %q: Fstat failed: %v", cName, err)
+ return nil, fs.ToErrno(err)
}
// Create child node & return