From: N Balachandran Date: Wed, 19 Feb 2025 16:10:29 +0000 (+0530) Subject: librbd: fix a crash in get_rollback_snap_id X-Git-Tag: v19.2.3~315^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b0ffb18a6417449c3a6f87095fb93733be054be;p=ceph.git 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) --- diff --git a/src/librbd/mirror/snapshot/Utils.cc b/src/librbd/mirror/snapshot/Utils.cc index 36d1558be430..14130664a742 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; } }