]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fix a crash in get_rollback_snap_id 61906/head
authorN Balachandran <nithya.balachandran@ibm.com>
Wed, 19 Feb 2025 16:10:29 +0000 (21:40 +0530)
committerN Balachandran <nithya.balachandran@ibm.com>
Wed, 19 Feb 2025 16:10:29 +0000 (21:40 +0530)
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 <nithya.balachandran@ibm.com>
src/librbd/mirror/snapshot/Utils.cc

index 9b8afbd59fab7f4d873a89363156d76bacf1ee21..f0682268bfaeec384ad9fa049c0641c86cdd9c71 100644 (file)
@@ -30,12 +30,15 @@ bool get_rollback_snap_id(
     uint64_t *rollback_snap_id) {
 
   for (; it != end; it++) {
-    auto mirror_ns = std::get<cls::rbd::MirrorSnapshotNamespace>(
-      it->second.snap_namespace);
-    if (mirror_ns.state != cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY) {
+    auto mirror_ns = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
+      &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;
     }
   }