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: v20.0.0~103^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7d75161051dad8047925259555d7ddd1a3e98de2;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 --- diff --git a/src/librbd/mirror/snapshot/Utils.cc b/src/librbd/mirror/snapshot/Utils.cc index 9b8afbd59fab7..f0682268bfaee 100644 --- a/src/librbd/mirror/snapshot/Utils.cc +++ b/src/librbd/mirror/snapshot/Utils.cc @@ -30,12 +30,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; } }