From 0a48392ce066471233cc1e81e957b2999b9c411c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 3 Jul 2019 15:52:55 -0500 Subject: [PATCH] mon/OSDMonitor: fix _lookup_snap to verify the pool matches We don't want to get false positives from keys for other pools. Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 2abc2fb438a73..7ba9cf5cda9b3 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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); -- 2.39.5