diff options
author | Jakob Unterwurzacher | 2015-11-15 14:15:21 +0100 |
---|---|---|
committer | Jakob Unterwurzacher | 2015-11-15 14:15:21 +0100 |
commit | 296bdf3af21a8964dcb884ff41ea7556cc811e9a (patch) | |
tree | 0ce449c4c27b6eb52746aad4853b5c76661c9bfe /cryptfs/address_translation.go | |
parent | 09499be6e9bffe3bd24f017b15736125d72c450c (diff) |
CipherSizeToPlainSize: Handle illegal states
A file never gets a cipherSize <= HEADER_LEN in normal operation.
However, this can happen if header write it interrupted or the
underlying filesystem does not support fallocate.
Noticed while trying to store a CIPHERDIR in another gocryptfs mount
(gocryptfs does not support fallocate)
Diffstat (limited to 'cryptfs/address_translation.go')
-rw-r--r-- | cryptfs/address_translation.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/cryptfs/address_translation.go b/cryptfs/address_translation.go index dfc6ef9..147040c 100644 --- a/cryptfs/address_translation.go +++ b/cryptfs/address_translation.go @@ -30,6 +30,16 @@ func (be *CryptFS) CipherSizeToPlainSize(cipherSize uint64) uint64 { return 0 } + if cipherSize == HEADER_LEN { + Warn.Printf("cipherSize %d == header size: interrupted write?\n", cipherSize) + return 0 + } + + if cipherSize < HEADER_LEN { + Warn.Printf("cipherSize %d < header size: corrupt file\n", cipherSize) + return 0 + } + // Block number at last byte blockNo := be.CipherOffToBlockNo(cipherSize - 1) blockCount := blockNo + 1 |