From 2b0ffb18a6417449c3a6f87095fb93733be054be Mon Sep 17 00:00:00 2001 From: N Balachandran Date: Wed, 19 Feb 2025 21:40:29 +0530 Subject: [PATCH] librbd: fix a crash in get_rollback_snap_id get_rollback_snap_id() did not check if the snapshot it was accessing was a mirror snapshot, causing it to crash if it wasn't. Fixes: https://tracker.ceph.com/issues/70075 Signed-off-by: N Balachandran (cherry picked from commit 7d75161051dad8047925259555d7ddd1a3e98de2) --- src/librbd/mirror/snapshot/Utils.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/librbd/mirror/snapshot/Utils.cc b/src/librbd/mirror/snapshot/Utils.cc index 36d1558be4302..14130664a742e 100644 --- a/src/librbd/mirror/snapshot/Utils.cc +++ b/src/librbd/mirror/snapshot/Utils.cc @@ -28,12 +28,15 @@ bool get_rollback_snap_id( uint64_t *rollback_snap_id) { for (; it != end; it++) { - auto mirror_ns = std::get( - it->second.snap_namespace); - if (mirror_ns.state != cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY) { + auto mirror_ns = std::get_if( + &it->second.snap_namespace); + if (mirror_ns == nullptr) { + continue; + } + if (mirror_ns->state != cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY) { break; } - if (mirror_ns.complete) { + if (mirror_ns->complete) { break; } } -- 2.39.5