Commit 1a2ed127 authored by Guido Vranken's avatar Guido Vranken

Problem: pointer overflow in zmq::v2_decoder_t::size_ready leading to remote…

Problem: pointer overflow in zmq::v2_decoder_t::size_ready leading to remote code execution (issue #3351)

Solution: refactor bounds check arithmetic such that no overflow shall occur
Signed-off-by: 's avatarGuido Vranken <guidovranken@gmail.com>
parent 7302b9b8
...@@ -115,8 +115,7 @@ int zmq::v2_decoder_t::size_ready (uint64_t msg_size_, ...@@ -115,8 +115,7 @@ int zmq::v2_decoder_t::size_ready (uint64_t msg_size_,
shared_message_memory_allocator &allocator = get_allocator (); shared_message_memory_allocator &allocator = get_allocator ();
if (unlikely (!_zero_copy if (unlikely (!_zero_copy
|| ((unsigned char *) read_pos_ + msg_size_ || msg_size_ > allocator.data () + allocator.size () - read_pos_ )) {
> (allocator.data () + allocator.size ())))) {
// a new message has started, but the size would exceed the pre-allocated arena // a new message has started, but the size would exceed the pre-allocated arena
// this happens every time when a message does not fit completely into the buffer // this happens every time when a message does not fit completely into the buffer
rc = _in_progress.init_size (static_cast<size_t> (msg_size_)); rc = _in_progress.init_size (static_cast<size_t> (msg_size_));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment