rocksdb/env
jsteemann 313e877285 fix reading encrypted files beyond file boundaries (#5160)
Summary:
This fix should help reading from encrypted files if the file-to-be-read
is smaller than expected. For example, when using the encrypted env and
making it read a journal file of exactly 0 bytes size, the encrypted env
code crashes with SIGSEGV in its Decrypt function, as there is no check
if the read attempts to read over the file's boundaries (as specified
originally by the `dataSize` parameter).

The most important problem this patch addresses is however that there is
no size underlow check in `CTREncryptionProvider::CreateCipherStream`:

The stream to be read will be initialized to a size of always
`prefix.size() - (2 * blockSize)`. If the prefix however is smaller than
twice the block size, this will obviously assume a _very_ large stream
and read over the bounds. The patch adds a check here as follows:

    // If the prefix is smaller than twice the block size, we would below read a
    // very large chunk of the file (and very likely read over the bounds)
    assert(prefix.size() >= 2 * blockSize);
    if (prefix.size() < 2 * blockSize) {
      return Status::Corruption("Unable to read from file " + fname + ": read attempt would read beyond file bounds");
    }

so embedders can catch the error in their release builds.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5160

Differential Revision: D14834633

Pulled By: sagar0

fbshipit-source-id: 47aa39a6db8977252cede054c7eb9a663b9a3484
2019-04-08 14:57:25 -07:00
..
env_basic_test.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
env_chroot.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
env_chroot.h Change RocksDB License 2017-07-15 16:11:23 -07:00
env_encryption.cc fix reading encrypted files beyond file boundaries (#5160) 2019-04-08 14:57:25 -07:00
env_hdfs.cc Fix db_stress for custom env (#5122) 2019-03-28 19:20:27 -07:00
env_posix.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
env_test.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
env.cc Collect compaction stats by priority and dump to info LOG (#5050) 2019-03-19 17:28:19 -07:00
io_posix.cc remove incorrect assert in GetUniqueIdFromFile (#5102) 2019-03-25 23:28:29 -07:00
io_posix.h Support for single-primary, multi-secondary instances (#4899) 2019-03-26 16:45:31 -07:00
mock_env_test.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
mock_env.cc Apply modernize-use-override (3) 2019-02-19 13:39:49 -08:00
mock_env.h Update all unique/shared_ptr instances to be qualified with namespace std (#4638) 2018-11-09 11:19:58 -08:00
posix_logger.h Auto recovery from out of space errors (#4164) 2018-09-15 13:43:04 -07:00