diff options
author | Jakob Unterwurzacher | 2019-01-01 20:49:56 +0100 |
---|---|---|
committer | Jakob Unterwurzacher | 2019-01-01 20:49:56 +0100 |
commit | cd0ec342b9692c71c50c77caa7b9cfde27426e4d (patch) | |
tree | e5ba0c5b437178369a1c752d0966803bb0ee9edb | |
parent | 77c3df48ef76aa8fa68744fec1ca19ca28fc13e3 (diff) |
fusefrontend: fix fd leak in error path
-rw-r--r-- | internal/fusefrontend/ctlsock_interface.go | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/internal/fusefrontend/ctlsock_interface.go b/internal/fusefrontend/ctlsock_interface.go index 92de40f..b29d150 100644 --- a/internal/fusefrontend/ctlsock_interface.go +++ b/internal/fusefrontend/ctlsock_interface.go @@ -67,16 +67,15 @@ func (fs *FS) decryptPathAt(dirfd int, cipherPath string) (plainPath string, err break } // Descend into next directory - oldWd := wd wd, err = syscallcompat.Openat(wd, part, syscall.O_NOFOLLOW, 0) if err != nil { return "", err } - // Unless we are in the first iteration, where dirfd is our wd, close - // the old working directory. - if i > 0 { - syscall.Close(oldWd) - } + // Yes this is somewhat wasteful in terms of used file descriptors: + // we keep them all open until the function returns. But it is simple + // and reliable. + defer syscall.Close(wd) } + return plainPath, nil } |