From 35c1dfe40917e714ea07377b9f20fd9cb80eebee Mon Sep 17 00:00:00 2001 From: Or Ozeri Date: Sun, 24 Jan 2021 09:32:44 +0200 Subject: [PATCH] librbd: do not share crypto image layers with ancestors This commit creates a unique crypto image dispatch per image, instead of sharing a single object with all ancestors. This should fix a seg-fault caused when closing an encrypted cloned image. Signed-off-by: Or Ozeri --- src/librbd/crypto/LoadRequest.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librbd/crypto/LoadRequest.cc b/src/librbd/crypto/LoadRequest.cc index 2e5cb023c65d..591e08d57a01 100644 --- a/src/librbd/crypto/LoadRequest.cc +++ b/src/librbd/crypto/LoadRequest.cc @@ -59,12 +59,12 @@ template void LoadRequest::finish(int r) { if (r == 0) { // load crypto layers to image and its ancestors - auto image_dispatch = CryptoImageDispatch::create( - m_crypto->get_data_offset()); auto ictx = m_image_ctx; while (ictx != nullptr) { auto object_dispatch = CryptoObjectDispatch::create( ictx, m_crypto); + auto image_dispatch = CryptoImageDispatch::create( + m_crypto->get_data_offset()); ictx->io_object_dispatcher->register_dispatch(object_dispatch); ictx->io_image_dispatcher->register_dispatch(image_dispatch); -- 2.47.3