]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/OSDMonitor: fix _lookup_snap to verify the pool matches
authorSage Weil <sage@redhat.com>
Wed, 3 Jul 2019 20:52:55 +0000 (15:52 -0500)
committerSage Weil <sage@redhat.com>
Wed, 3 Jul 2019 20:59:44 +0000 (15:59 -0500)
We don't want to get false positives from keys for other pools.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc

index 2abc2fb438a73c5ef8e6bcb3afd7983452d8639a..7ba9cf5cda9b32bc176af29ccab8413dc90eb871 100644 (file)
@@ -6365,6 +6365,27 @@ int OSDMonitor::_lookup_snap(bool purged,
             << "', wrong prefix" << dendl;
     return -ENOENT;
   }
+  string gotk = it->key();
+  const char *format;
+  if (purged) {
+    format = "purged_snap_%llu_";
+  } else {
+    format = "removed_snap_%llu_";
+  }
+  long long int keypool;
+  int n = sscanf(gotk.c_str(), format, &keypool);
+  if (n != 1) {
+    derr << __func__ << " invalid k '" << gotk << "'" << dendl;
+    return -ENOENT;
+  }
+  if (pool != keypool) {
+    dout(20) << __func__ << (purged ? " (purged)" : " (removed)")
+            << " pool " << pool << " snap " << snap
+            << " - key '" << k << "' got '" << gotk
+            << "', wrong pool " << keypool
+            << dendl;
+    return -ENOENT;
+  }
   bufferlist v = it->value();
   auto p = v.cbegin();
   decode(*begin, p);