]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common: assert if buffer advance length overflow
authorZhi Zhang <willzzhang@tencent.com>
Tue, 16 Oct 2018 06:26:14 +0000 (14:26 +0800)
committerZhi Zhang <willzzhang@tencent.com>
Tue, 16 Oct 2018 06:26:14 +0000 (14:26 +0800)
In the old ceph version, buffer advance length was defined as int, but
in async msg, the real length of data buffer was defined as unsigned.

Occassionly some MDS message back from OSD was too large, which caused
this length overflow and made MDS crash.

For compatibility reason, add an assertion here if buffer advance length
is overflow.

Fixes: http://tracker.ceph.com/issues/36340
Signed-off-by: Zhi Zhang <zhangz.david@outlook.com>
src/msg/async/Protocol.cc

index 9d3fa503fbbfeb7651cb13065656e979ab57b815..bcd384e5e72a5bece8a3457cd2a54adfc4c79b7f 100644 (file)
@@ -827,6 +827,7 @@ void ProtocolV1::handle_message_data(char *buffer, int r) {
 
   bufferptr bp = data_blp.get_current_ptr();
   unsigned read_len = std::min(bp.length(), msg_left);
+  ceph_assert(read_len < std::numeric_limits<int>::max());
   data_blp.advance(read_len);
   data.append(bp, 0, read_len);
   msg_left -= read_len;