From: Sage Weil Date: Tue, 28 Feb 2017 04:21:10 +0000 (-0600) Subject: mon/OSDMonitor: prevent injecting CRUSH maps with ruleset != rule id X-Git-Tag: v12.1.0~27^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9c24bdb18c84f418168d8845176479affd489bd9;p=ceph.git mon/OSDMonitor: prevent injecting CRUSH maps with ruleset != rule id Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index e6bbd93ae7b..25704032012 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -6965,7 +6965,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, ss << "Failed to parse crushmap: " << e.what(); goto reply; } - + int64_t prior_version = 0; if (cmd_getval(g_ceph_context, cmdmap, "prior_version", prior_version)) { if (prior_version == osdmap.get_crush_version() - 1) { @@ -6992,11 +6992,16 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, } } + if (crush.has_legacy_rulesets()) { + err = -EINVAL; + ss << "crush maps with ruleset != ruleid are no longer allowed"; + goto reply; + } if (!validate_crush_against_features(&crush, ss)) { err = -EINVAL; goto reply; } - + const auto& osdmap_pools = osdmap.get_pools(); for (auto pit = osdmap_pools.begin(); pit != osdmap_pools.end(); ++pit) { const int64_t pool_id = pit->first;