| Age | Commit message (Collapse) | Author | 
 | 
Pread() needs retry logic, so instead of implementing it ourselves,
use os.File.
Reported by @slackner at
https://github.com/rfjakob/gocryptfs/commit/c09bf1f2284706232642431c75fa1f3d8500a9d0#r31813394
 | 
 | 
These are created on demand by the Go runtime and are usually
not interesting.
 | 
 | 
Tests outside the test_helpers package may want to look
at this.
 | 
 | 
 | 
 | 
Also, drop entries that disappear while we stat them.
 | 
 | 
With the FD leak logic, the mount/unmount functions have
become complex enough to give them their own file.
 | 
 | 
For now, this only prints a message but does not fail the tests.
 | 
 | 
 | 
 | 
Thanks @slackner!
Fixes https://github.com/rfjakob/gocryptfs/issues/306
 | 
 | 
 | 
 | 
This will allow to tests to monitor fd usage and maybe other things.
 | 
 | 
An Open() a fifo blocks until it is opened for writing.
This meant that xattr operations on FIFOs would block.
Pass O_NONBLOCK to fix that, and add a test.
 | 
 | 
This function is NOT symlink-safe. Darwin needs it because it lacks
fgetxattr(2) and friends.
 | 
 | 
Uses /proc/self/fd.
 | 
 | 
Uses /proc/self/fd on Linux.
 | 
 | 
Uses the /proc/self/fd trick.
 | 
 | 
Uses the /proc/self/fd trick, which does not work
on Darwin.
 | 
 | 
Test for the upcoming fd-based xattr support.
 | 
 | 
unix.UtimesNanoAt now also exists on Darwin, yay!
 | 
 | 
Failure was:
 + GOOS=darwin
 + GOARCH=amd64
 + go build -tags without_openssl
 # github.com/rfjakob/gocryptfs/internal/fusefrontend
 internal/fusefrontend/fs_dir.go:159:60: cannot use origMode | 448 (type uint16) as type uint32 in argument to syscallcompat.Fchmodat
 internal/fusefrontend/fs_dir.go:170:33: cannot use origMode (type uint16) as type uint32 in argument to syscallcompat.Fchmodat
 | 
 | 
No changes needed.
 | 
 | 
Now uses Unlinkat.
 | 
 | 
And also rename DeleteLongName() -> DeleteLongNameAt(). The
naming follow the names open the openat() etc syscalls.
 | 
 | 
Now symlink-safe through Readlinkat().
 | 
 | 
Interestingly, little or no performance impact:
$ ./benchmark.bash
Testing gocryptfs at /tmp/benchmark.bash.39W: gocryptfs v1.6-42-g30c2349-dirty; go-fuse v20170619-66-g6df8ddc; 2018-11-04 go1.11
Downloading linux-3.0.tar.gz
/tmp/linux-3.0.tar.gz                  100%[=========================================================================>]  92.20M  2.93MB/s    in 31s
2018-11-04 21:44:44 URL:https://cdn.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.gz [96675825/96675825] -> "/tmp/linux-3.0.tar.gz" [1]
WRITE: 262144000 bytes (262 MB, 250 MiB) copied, 1.1808 s, 222 MB/s
READ:  262144000 bytes (262 MB, 250 MiB) copied, 0.866438 s, 303 MB/s
UNTAR: 24.745
MD5:   12.050
LS:    3.525
RM:    9.544
Note: kernel has been updated:
$ uname -a
Linux brikett 4.18.16-200.fc28.x86_64 #1 SMP Sat Oct 20 23:53:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
 | 
 | 
 | 
 | 
Instead of calling syscall.Open() ourselves, rely on
openBackingDir().
 | 
 | 
Use openBackingDir() and Fstatat().
High performance impact, though part of it should be
mitigated by adding DirIV caching to the new code paths.
$ ./benchmark.bash
Testing gocryptfs at /tmp/benchmark.bash.Eou: gocryptfs v1.6-37-ge3914b3-dirty; go-fuse v20170619-66-g6df8ddc; 2018-10-14 go1.11
WRITE: 262144000 bytes (262 MB, 250 MiB) copied, 1.2289 s, 213 MB/s
READ:  262144000 bytes (262 MB, 250 MiB) copied, 1.02616 s, 255 MB/s
UNTAR: 24.490
MD5:   13.120
LS:    3.368
RM:    9.232
 | 
 | 
openBackingDir() used encryptPath(), which is not symlink-safe
itself. Drop encryptPath() and implement our own directory walk.
Adds three seconds to untar and two seconds to rm:
$ ./benchmark.bash
Testing gocryptfs at /tmp/benchmark.bash.MzG: gocryptfs v1.6-36-g8fb3c2f-dirty; go-fuse v20170619-66-g6df8ddc; 2018-10-14 go1.11
WRITE: 262144000 bytes (262 MB, 250 MiB) copied, 1.25078 s, 210 MB/s
READ:  262144000 bytes (262 MB, 250 MiB) copied, 1.0318 s, 254 MB/s
UNTAR: 20.941
MD5:   11.568
LS:    1.638
RM:    5.337
 | 
 | 
Document which FUSE calls are already symlink-safe in
the function comment.
 | 
 | 
DecryptPath is now symlink-safe through the use of *at()
functions.
 | 
 | 
Make Access() symlink-safe through use of faccessat.
 | 
 | 
So the reader does not have to read through the whole ticket.
The commit message has a nice summary of the problem.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
master key.
Further raises the bar for recovering keys from memory.
 | 
 | 
Mostly detected with the 'codespell' utility, but also includes some
manual grammar fixes.
 | 
 | 
The same condition is already checked a few lines above, and 'err' is not
changed inbetween.
 | 
 | 
The directory was already created, so return success even if Fchownat fails.
The same error handling is already used if fs.args.PlaintextNames is false.
 | 
 | 
 | 
 | 
This ensures that ./build.bash still works when the LDFLAGS environment
variable contains multiple options, e.g., LDFLAGS="-lpthread -lm". The
correct way of passing multiple options is discussed here:
https://github.com/golang/go/issues/6234
For some unknown reason, the method only works when -extldflags is the
last argument - is this a bug in Go?
 | 
 | 
As requested at https://github.com/rfjakob/gocryptfs/pull/280
 | 
 | 
Support both Go 1.7...1.9 and Go 1.10 by checking the
version and using the appropropriate syntax.
We trim GOPATH/src and use both -gcflags and -asmflags like Debian does in
https://salsa.debian.org/go-team/packages/dh-golang/blob/ab2bbcfc00b1229066cc3d3d1195ac901a2b9411/lib/Debian/Debhelper/Buildsystem/golang.pm#L465 .
 | 
 | 
SOURCE_DATE_EPOCH seems to be the standard env variable
for faking a build date for reproducible builds.
 | 
 | 
The CPU-Benchmarks wiki page has a lot more info
than openssl-gcm.md had.
 | 
 | 
Due to a copy-paste error, we ran the wrong test in the
subprocess.
Thanks @slackner for noticing at
https://github.com/rfjakob/gocryptfs/commit/295d432175292dbaef572093d784aab55f5c0b8f#r31690478 !
 | 
 | 
Allows better error handling, gets rid of the call to an
external program, and fixes https://github.com/rfjakob/gocryptfs/issues/278 .
 |