From a1ba4b6576695a3e680364813425ffd9c9c7c148 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 3 Jan 2019 18:11:07 +0100 Subject: [PATCH] Omit syscall.O_RDONLY flag when passing O_PATH. When O_PATH is specified in flags, flag bits other than O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW are ignored. --- init_dir.go | 2 +- internal/fusefrontend/openbackingdir.go | 4 ++-- tests/test_helpers/helpers.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/init_dir.go b/init_dir.go index 1f5a7fc..ecfec9d 100644 --- a/init_dir.go +++ b/init_dir.go @@ -99,7 +99,7 @@ func initDir(args *argContainer) { // in the root dir if !args.plaintextnames && !args.reverse { // Open cipherdir (following symlinks) - dirfd, err := syscall.Open(args.cipherdir, syscall.O_RDONLY|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) + dirfd, err := syscall.Open(args.cipherdir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) if err == nil { err = nametransform.WriteDirIVAt(dirfd) syscall.Close(dirfd) diff --git a/internal/fusefrontend/openbackingdir.go b/internal/fusefrontend/openbackingdir.go index d56848f..1cca81b 100644 --- a/internal/fusefrontend/openbackingdir.go +++ b/internal/fusefrontend/openbackingdir.go @@ -42,7 +42,7 @@ func (fs *FS) openBackingDir(relPath string) (dirfd int, cName string, err error return dirfd, cName, nil } // Open cipherdir (following symlinks) - dirfd, err = syscall.Open(fs.args.Cipherdir, syscall.O_RDONLY|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) + dirfd, err = syscall.Open(fs.args.Cipherdir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) if err != nil { return -1, "", err } @@ -65,7 +65,7 @@ func (fs *FS) openBackingDir(relPath string) (dirfd int, cName string, err error break } // Not the last part? Descend into next directory. - dirfd2, err := syscallcompat.Openat(dirfd, cName, syscall.O_RDONLY|syscall.O_NOFOLLOW|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) + dirfd2, err := syscallcompat.Openat(dirfd, cName, syscall.O_NOFOLLOW|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) syscall.Close(dirfd) if err != nil { return -1, "", err diff --git a/tests/test_helpers/helpers.go b/tests/test_helpers/helpers.go index 9ff29a8..90eebdf 100644 --- a/tests/test_helpers/helpers.go +++ b/tests/test_helpers/helpers.go @@ -114,7 +114,7 @@ func ResetTmpDir(createDirIV bool) { } if createDirIV { // Open cipherdir (following symlinks) - dirfd, err := syscall.Open(DefaultCipherDir, syscall.O_RDONLY|syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) + dirfd, err := syscall.Open(DefaultCipherDir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) if err == nil { err = nametransform.WriteDirIVAt(dirfd) syscall.Close(dirfd)