summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2020-05-24 23:30:25 +0200
committerJakob Unterwurzacher2020-05-24 23:30:25 +0200
commit15ff79bf144cc8fe780bffdd7447dfbb5df604a8 (patch)
tree4b5a1026bee04a27653bd0e3d86233bb8f7828ae
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
-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 {