]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fix a crash in get_rollback_snap_id
authorN Balachandran <nithya.balachandran@ibm.com>
Wed, 19 Feb 2025 16:10:29 +0000 (21:40 +0530)
committerN Balachandran <nithya.balachandran@ibm.com>
Fri, 28 Feb 2025 03:27:34 +0000 (08:57 +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>
(cherry picked from commit 7d75161051dad8047925259555d7ddd1a3e98de2)

src/librbd/mirror/snapshot/Utils.cc

index 36d1558be4302a743810c544a3dd2e85d85b7586..14130664a742e1c551804943289971b74bf5d021 100644 (file)
@@ -28,12 +28,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;
     }
   }