From: Swen Schillig Date: Fri, 15 Feb 2019 13:34:05 +0000 (+0100) Subject: ctdb: buffer write beyond limits X-Git-Tag: ldb-1.6.1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa8e69ac9538980c441b7fbefe0979027ecc8eac;p=thirdparty%2Fsamba.git ctdb: buffer write beyond limits In order to calculate the number of bytes correctly which are to be read into the buffer, the buffer.offset must be taken into account. This patch fixes a regression introduced by 382705f495dd. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13791 Signed-off-by: Swen Schillig Reviewed-by: Christof Schmitt Reviewed-by: Martin Schwenke --- diff --git a/ctdb/common/ctdb_io.c b/ctdb/common/ctdb_io.c index d86540762ea..c16eb7f67b7 100644 --- a/ctdb/common/ctdb_io.c +++ b/ctdb/common/ctdb_io.c @@ -164,6 +164,7 @@ static void queue_io_read(struct ctdb_queue *queue) { int num_ready = 0; uint32_t pkt_size = 0; + uint32_t start_offset; ssize_t nread; uint8_t *data; @@ -226,7 +227,17 @@ buffer_shift: } data_read: - num_ready = MIN(num_ready, queue->buffer.size - queue->buffer.length); + start_offset = queue->buffer.length + queue->buffer.offset; + if (start_offset < queue->buffer.length) { + DBG_ERR("Buffer overflow\n"); + goto failed; + } + if (start_offset > queue->buffer.size) { + DBG_ERR("Buffer overflow\n"); + goto failed; + } + + num_ready = MIN(num_ready, queue->buffer.size - start_offset); if (num_ready > 0) { nread = sys_read(queue->fd,