zlogger: propagate written data length correctly 68/282868/2
authorMateusz Majewski <m.majewski2@samsung.com>
Wed, 12 Oct 2022 12:21:04 +0000 (14:21 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Thu, 13 Oct 2022 14:43:33 +0000 (16:43 +0200)
Change-Id: Ib033ac57d6dd327a76d3a56bf4d41ceddee3ac2d

kernel/zlogger/zlogger.c

index 32eefbf..1110643 100644 (file)
@@ -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;