From: Sage Weil Date: Thu, 2 Feb 2012 23:02:41 +0000 (-0800) Subject: msg: check compat_version before decoding X-Git-Tag: v0.42~45^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8d90856a1f93f8377c997cf02ce778d412af40e8;p=ceph.git msg: check compat_version before decoding If the newly constructed message's version is older than the compat_version, don't even try to decode; just fail. Signed-off-by: Sage Weil --- diff --git a/src/msg/Message.cc b/src/msg/Message.cc index f863b8ae4ccfc..ff71356bc2a22 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -605,6 +605,21 @@ Message *decode_message(CephContext *cct, ceph_msg_header& header, ceph_msg_foot } return 0; } + + // m->header.version, if non-zero, should be populated with the + // newest version of the encoding the code supports. If set, check + // it against compat_version. + if (m->get_header().version && + m->get_header().version < header.compat_version) { + ldout(cct, 0) << "will not decode message of type " << type + << " version " << header.version + << " because compat_version " << header.compat_version + << " > supported version " << m->get_header().version << dendl; + if (cct->_conf->ms_die_on_bad_msg) + assert(0); + m->put(); + return 0; + } m->set_header(header); m->set_footer(footer);