From 97a3df7b49c04fe3060dc3e5958beab84ddf67d7 Mon Sep 17 00:00:00 2001 From: Mateusz Majewski Date: Wed, 12 Oct 2022 14:21:04 +0200 Subject: [PATCH] zlogger: propagate written data length correctly Change-Id: Ib033ac57d6dd327a76d3a56bf4d41ceddee3ac2d --- kernel/zlogger/zlogger.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel/zlogger/zlogger.c b/kernel/zlogger/zlogger.c index 32eefbf..1110643 100644 --- a/kernel/zlogger/zlogger.c +++ b/kernel/zlogger/zlogger.c @@ -50,6 +50,8 @@ #define ZLOG_FD_BUFER (2 * ZLOGGER_MB) +#define MAX_BUF_LEN 255 + struct queue { char name[5]; uint16_t front; @@ -501,7 +503,7 @@ static int _zlog_write(const unsigned char prio, const char *tag, const char *ms block->head.offset += (uint16_t)entry_size; block->head.ts = ts; - return (int)entry_size; + return msg_size - 1; } static void endl_to_zero(struct zlog_file *zlog_file_data, size_t len) @@ -538,7 +540,7 @@ static ssize_t partition_write_buffer(struct zlog_file *zlog_file_data, size_t l return -EFAULT; } - cb += strnlen(cb, len - (cb - buffer)); + cb += res; } return 0; } @@ -556,6 +558,9 @@ static ssize_t zlogger_write(struct file *filep, const char __user *buffer, size zlog_file_data = (struct zlog_file *)filep->private_data; + if (len > MAX_BUF_LEN) + len = MAX_BUF_LEN; + if (len >= zlog_file_data->buffer_len && !update_zlog_data_buffer_size(zlog_file_data, len + 1)) { pr_err("update_zlog_data_buffer_size failed\n"); return -ENOMEM; -- 2.34.1