Alexey Serbin created KUDU-3520:
-----------------------------------
Summary: File descriptor leak in Env::NewRWFile() when
ecryption-at-rest is enabled
Key: KUDU-3520
URL: https://issues.apache.org/jira/browse/KUDU-3520
Project: Kudu
Issue Type: Bug
Components: fs, security, tserver
Affects Versions: 1.17.0, 1.16.0
Reporter: Alexey Serbin
There is a file descriptor leak in {{Env::NewRWFile()}} on an error path when
encryption-at-rest is enabled.
In the code below, if {{ReadEncryptionHeader()}} or {{WriteEncryptionHeader()}}
failed, the descriptor of the file opened by {{DoOpen()}} would be leaked.
{noformat}
RETURN_NOT_OK(DoOpen(fname, opts.mode, &fd));
EncryptionHeader eh;
if (encrypt) {
DCHECK(encryption_key_);
if (size >= kEncryptionHeaderSize) {
RETURN_NOT_OK(ReadEncryptionHeader(fd, fname, *encryption_key_, &eh));
} else {
RETURN_NOT_OK(GenerateHeader(&eh));
RETURN_NOT_OK(WriteEncryptionHeader(fd, fname, *encryption_key_, eh));
}
}
result->reset(new PosixRWFile(fname, fd, opts.sync_on_close, encrypt, eh));
{noformat}
It's been evidenced in the wild when creating the metadata file for a tablet
during tablet copying failed with the error like below:
{noformat}
Runtime error: Couldn't create tablet metadata: Failed to write tablet metadata
d199a872b03848d695f067ed5c694835: Failed to initialize encryption:
error:0607B083:digital envelope routines:EVP_CipherInit_ex:no cipher
set:crypto/evp/evp_enc.c:170
{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)