From: Or Ozeri Date: Sat, 9 Jan 2021 20:26:59 +0000 (+0200) Subject: librbd: fix crypto related memory leaks X-Git-Tag: v16.1.0~87^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2ab05ea0458932cf31aaf5d552d9f9187842c454;p=ceph.git librbd: fix crypto related memory leaks This commit fixes memory leaks introduced by the new librbd encryption feature Signed-off-by: Or Ozeri --- diff --git a/src/librbd/crypto/BlockCrypto.cc b/src/librbd/crypto/BlockCrypto.cc index c782807bd2a..172bf146001 100644 --- a/src/librbd/crypto/BlockCrypto.cc +++ b/src/librbd/crypto/BlockCrypto.cc @@ -19,6 +19,14 @@ BlockCrypto::BlockCrypto(CephContext* cct, DataCryptor* data_cryptor, ceph_assert((block_size % data_cryptor->get_block_size()) == 0); } +template +BlockCrypto::~BlockCrypto() { + if (m_data_cryptor != nullptr) { + delete m_data_cryptor; + m_data_cryptor = nullptr; + } +} + template int BlockCrypto::crypt(ceph::bufferlist* data, uint64_t image_offset, CipherMode mode) { diff --git a/src/librbd/crypto/BlockCrypto.h b/src/librbd/crypto/BlockCrypto.h index a9f0ad3c002..31b39a2b3a1 100644 --- a/src/librbd/crypto/BlockCrypto.h +++ b/src/librbd/crypto/BlockCrypto.h @@ -21,6 +21,7 @@ public: } BlockCrypto(CephContext* cct, DataCryptor* data_cryptor, uint64_t block_size, uint64_t data_offset); + ~BlockCrypto(); int encrypt(ceph::bufferlist* data, uint64_t image_offset) override; int decrypt(ceph::bufferlist* data, uint64_t image_offset) override; diff --git a/src/librbd/crypto/CryptoObjectDispatch.cc b/src/librbd/crypto/CryptoObjectDispatch.cc index 5f6df63d88a..c2c24c8ce2f 100644 --- a/src/librbd/crypto/CryptoObjectDispatch.cc +++ b/src/librbd/crypto/CryptoObjectDispatch.cc @@ -352,6 +352,7 @@ struct C_UnalignedObjectWriteRequest : public Context { if (io::util::trigger_copyup(image_ctx, object_no, io_context, ctx)) { return; } + delete ctx; object_exists = false; } else if (r < 0) { complete(r);