From: Colin Patrick McCabe Date: Mon, 25 Oct 2010 19:24:13 +0000 (-0700) Subject: ./ceph osd setcrushmap: validate crushmap X-Git-Tag: v0.23~112 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d4bbde5ab171b37d1ecefdd396b7b04c6d41d0d2;p=ceph.git ./ceph osd setcrushmap: validate crushmap Signed-off-by: Colin McCabe --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 18c0b1cad40..7a3333685bb 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1256,7 +1256,18 @@ bool OSDMonitor::prepare_command(MMonCommand *m) if (m->cmd.size() > 1) { if (m->cmd[1] == "setcrushmap") { dout(10) << "prepare_command setting new crush map" << dendl; - pending_inc.crush = m->get_data(); + bufferlist data(m->get_data()); + try { + bufferlist::iterator bl(data.begin()); + CrushWrapper crush; + crush.decode(bl); + } + catch (const std::exception &e) { + err = -EINVAL; + ss << "Failed to parse crushmap: " << e.what(); + goto out; + } + pending_inc.crush = data; string rs = "set crush map"; paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version())); return true;