diff options
author | Jakob Unterwurzacher | 2020-05-24 23:30:25 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2020-05-24 23:30:25 +0200 |
commit | 15ff79bf144cc8fe780bffdd7447dfbb5df604a8 (patch) | |
tree | 4b5a1026bee04a27653bd0e3d86233bb8f7828ae /internal/syscallcompat/getdents_linux.go | |
parent | b3350f0ebbd6cf4215b85a6c126595b822cb0bc0 (diff) |
syscallcompat: warn when Getdents truncates data
On CIFS mounts, unix.Getdents can return sudden ENOENT
in the middle of data. This will not be reported as an error
by user space tools, so return EIO instead.
Also log it as a warning.
https://github.com/rfjakob/gocryptfs/issues/483
Diffstat (limited to 'internal/syscallcompat/getdents_linux.go')
-rw-r--r-- | internal/syscallcompat/getdents_linux.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/internal/syscallcompat/getdents_linux.go b/internal/syscallcompat/getdents_linux.go index 6cfb033..2425326 100644 --- a/internal/syscallcompat/getdents_linux.go +++ b/internal/syscallcompat/getdents_linux.go @@ -42,6 +42,10 @@ func getdents(fd int) ([]fuse.DirEntry, error) { } continue } else if err != nil { + if smartBuf.Len() > 0 { + tlog.Warn.Printf("warning: unix.Getdents returned errno %d in the middle of data", err.(syscall.Errno)) + return nil, syscall.EIO + } return nil, err } if n == 0 { |