aboutsummaryrefslogtreecommitdiff
path: root/internal/syscallcompat
diff options
context:
space:
mode:
authorJakob Unterwurzacher2020-05-24 23:30:25 +0200
committerJakob Unterwurzacher2020-05-24 23:30:25 +0200
commit15ff79bf144cc8fe780bffdd7447dfbb5df604a8 (patch)
tree4b5a1026bee04a27653bd0e3d86233bb8f7828ae /internal/syscallcompat
parentb3350f0ebbd6cf4215b85a6c126595b822cb0bc0 (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')
-rw-r--r--internal/syscallcompat/getdents_linux.go4
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 {