rfjakob/gocryptfs

Travis TestWrite10 failure

rfjakob opened this issue · 4 comments

https://api.travis-ci.org/v3/job/488037836/log.txt / https://travis-ci.org/rfjakob/gocryptfs/jobs/488037836

doRead 1450284: corrupt header: ParseHeader: invalid version, want=2 have=0
-wpanic turns this warning into a panic: doRead 1450284: corrupt header: ParseHeader: invalid version, want=2 have=0
panic: -wpanic turns this warning into a panic: doRead 1450284: corrupt header: ParseHeader: invalid version, want=2 have=0

goroutine 20 [running]:
log.(*Logger).Panic(0xc4200904b0, 0xc42031d950, 0x1, 0x1)
	/home/travis/.gimme/versions/go1.9.7.linux.amd64/src/log/log.go:212 +0xbe
github.com/rfjakob/gocryptfs/internal/tlog.(*toggledLogger).Printf(0xc4200748a0, 0x68b773, 0x1d, 0xc42031db38, 0x2, 0x2)
	github.com/rfjakob/gocryptfs/internal/tlog/log.go:78 +0x221
github.com/rfjakob/gocryptfs/internal/fusefrontend.(*File).doRead(0xc420312540, 0xc42039c000, 0x0, 0x1000, 0x0, 0x1000, 0x60000000001, 0x8, 0x18, 0xc420384340)
	github.com/rfjakob/gocryptfs/internal/fusefrontend/file.go:161 +0xfda
github.com/rfjakob/gocryptfs/internal/fusefrontend.(*File).Read(0xc420312540, 0xc42039c000, 0x1000, 0x1000, 0x0, 0x0, 0x0, 0xc400000000)
	github.com/rfjakob/gocryptfs/internal/fusefrontend/file.go:246 +0x290
github.com/hanwen/go-fuse/fuse/pathfs.(*pathInode).Read(0xc4200c0510, 0x9c19a0, 0xc420312540, 0xc42039c000, 0x1000, 0x1000, 0x0, 0xc4202de198, 0x1000, 0x1000, ...)
	github.com/hanwen/go-fuse/fuse/pathfs/pathfs.go:749 +0x65
github.com/hanwen/go-fuse/fuse/nodefs.(*rawBridge).Read(0xc420074f30, 0xc4202de180, 0xc42039c000, 0x1000, 0x1000, 0x1000, 0x533901, 0xc420384320)
	github.com/hanwen/go-fuse/fuse/nodefs/fsops.go:451 +0xda
github.com/hanwen/go-fuse/fuse.doRead(0xc42008e300, 0xc4202de000)
	github.com/hanwen/go-fuse/fuse/opcode.go:364 +0x9d
github.com/hanwen/go-fuse/fuse.(*Server).handleRequest(0xc42008e300, 0xc4202de000, 0xc4202de000)
	github.com/hanwen/go-fuse/fuse/server.go:431 +0x296
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc42008e300, 0xc42019f601)
	github.com/hanwen/go-fuse/fuse/server.go:403 +0x1a9
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
	github.com/hanwen/go-fuse/fuse/server.go:291 +0x2be
ReadFile: open /tmp/gocryptfs-test-parent/187858704/default-plain/10: transport endpoint is not connected
--- FAIL: TestWrite10 (0.00s)
	helpers.go:184: ReadFile failed: read /tmp/gocryptfs-test-parent/187858704/default-plain/10: transport endpoint is not connected
	helpers.go:191: Stat failed: stat /tmp/gocryptfs-test-parent/187858704/default-plain/10: transport endpoint is not connected
	matrix_test.go:117: Wrong content, hashWant=a63c90cc3684ad8b0a2176a6a8fe9005 hashActual=
[...]
FAIL	github.com/rfjakob/gocryptfs/tests/matrix	1.019s

Another one (log), and this time we have a hexdump:

doRead 1575182: corrupt header: ParseHeader: invalid version, want=2 have=0.
Hexdump: 000000000000000000000000000000000000

TestWrite10Tight caught one as well: https://travis-ci.org/rfjakob/gocryptfs/jobs/502204426

Running the "matrix" tests in a loop for 4 hours on my local machine ( 5.1.15-300.fc30.x86_64 ) did not trigger this. Kernel version dependent?

Gotcha:

...
doWrite: file was empty, new fileID: [115 66 59 129 1 85 112 250 172 58 255 190 217 235 13 88]read ok, 10 bytes
doWrite: file was empty, new fileID: [23 133 110 231 192 80 249 147 52 117 113 151 72 92 225 115]read ok, 10 bytes
doWrite: file was empty, new fileID: [253 182 222 67 115 161 225 0 184 245 157 22 158 239 175 43]read ok, 10 bytes
doWrite: file was empty, new fileID: [88 43 26 123 250 225 24 4 246 254 249 183 54 140 25 17]read ok, 10 bytes
doWrite: file was empty, new fileID: [10 71 200 122 115 201 36 1 33 158 178 3 130 208 15 138]read ok, 10 bytes
doWrite: file was empty, new fileID: [186 145 0 238 142 185 140 223 9 240 37 142 208 62 157 58]read ok, 10 bytes
doWrite: file was empty, new fileID: [108 212 151 134 143 228 138 118 111 42 218 92 2 176 79 196]read ok, 10 bytes
doWrite: file was empty, new fileID: [163 170 59 191 132 131 63 112 201 162 72 97 10 240 70 24]read ok, 10 bytes
doWrite: file was empty, new fileID: [52 202 122 33 57 106 31 228 6 72 193 21 37 174 54 134]read ok, 10 bytes
doWrite: file was empty, new fileID: [99 162 214 221 109 101 98 8 110 46 203 151 111 99 218 139]read ok, 10 bytes
doWrite: file was empty, new fileID: [204 135 155 46 168 155 62 157 134 95 130 91 173 201 11 150]read ok, 10 bytes
doWrite: file was empty, new fileID: [15 12 106 64 11 208 119 132 167 59 253 214 148 56 190 23]read ok, 10 bytes
doWrite: file was empty, new fileID: [170 68 23 222 23 241 87 68 101 238 69 206 49 235 66 103]read ok, 10 bytes
doWrite: file already had a fileID: [170 68 23 222 23 241 87 68 101 238 69 206 49 235 66 103]
doRead 2561939: corrupt header: ParseHeader: header is all-zero. Header hexdump: 000000000000000000000000000000000000
File hexdump (60 bytes): 0000000000000000000000000000000000001c7e3ceaaa4174354e375f62334d622cc25f2ab216d66eb8e5a84ba7f8ffb745269060bfc73bc2fec47e

The inode number is reused before the Close() finishes