]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: prevent injecting CRUSH maps with ruleset != rule id
authorSage Weil <sage@redhat.com>
Tue, 28 Feb 2017 04:21:10 +0000 (22:21 -0600)
committerSage Weil <sage@redhat.com>
Mon, 19 Jun 2017 23:09:06 +0000 (19:09 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc

index e6bbd93ae7bd95ed72a2e041082e17b2eb58d713..25704032012e3bb19d9a0f00ef1e9f19af49cc0a 100644 (file)
@@ -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;