From: Michal Bloch Date: Wed, 16 Aug 2017 12:08:19 +0000 (+0200) Subject: logger: handle logs of odd length correctly X-Git-Tag: submit/tizen/20170816.150837^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=154c5eaaf1ecf6224de0bcafc872c4952ffdae9b;p=platform%2Fcore%2Fsystem%2Fdlog.git logger: handle logs of odd length correctly If there was only one byte left before the buffer wraps around, the length field, which consists of 2 bytes, would end up torn apart, yielding garbage on naive read attempts. While libdlog did ensure to write only even-length logs, this could not be relied upon when not using it: this includes kmsg and, potentially, malicious users. Change-Id: I7ec3777d650ec2642812b27e87de5e16e0dd72fc Signed-off-by: Michal Bloch --- diff --git a/src/logger/logger.c b/src/logger/logger.c index 39afcd5..87663ec 100644 --- a/src/logger/logger.c +++ b/src/logger/logger.c @@ -899,8 +899,10 @@ static int print_out_logs(struct logger *server, struct reader *reader) } while (from != buffer->tail && (!reader->dumpcount || (reader->bytes_to_read > 0))) { - ple = (struct logger_entry*)(buffer->buffer + from); - copy_from_buffer(tmp, from, ple->len, buffer); + typeof(ple->len) length; + copy_from_buffer(&length, from, sizeof length, buffer); + + copy_from_buffer(tmp, from, length, buffer); ple = (struct logger_entry*)tmp; from += ple->len;