[PATCH -next] xtensa/simdisk: fix error handling in proc_read_simdisk()

From: Yi Yang
Date: Tue May 10 2022 - 04:08:22 EST


The frist simple_read_from_buffer() will change ppos. if ppos >= 1.
The second simple_read_from_buffer() will does not work and return 0.

Fixes: a69755b18774 ("xtensa simdisk: switch to proc_create_data()")
Signed-off-by: Yi Yang <yiyang13@xxxxxxxxxx>
---
arch/xtensa/platforms/iss/simdisk.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/arch/xtensa/platforms/iss/simdisk.c b/arch/xtensa/platforms/iss/simdisk.c
index 0f0e0724397f..618c080c388d 100644
--- a/arch/xtensa/platforms/iss/simdisk.c
+++ b/arch/xtensa/platforms/iss/simdisk.c
@@ -210,13 +210,21 @@ static ssize_t proc_read_simdisk(struct file *file, char __user *buf,
{
struct simdisk *dev = pde_data(file_inode(file));
const char *s = dev->filename;
+ char *temp;
+
if (s) {
+ ssize_t len = strlen(s);
+
+ temp = kmalloc(len + 2, GFP_KERNEL);
+ if (!temp)
+ return -ENOMEM;
+
+ scnprintf(temp, len + 2, "%s\n", s);
ssize_t n = simple_read_from_buffer(buf, size, ppos,
- s, strlen(s));
- if (n < 0)
- return n;
- buf += n;
- size -= n;
+ temp, strlen(temp));
+
+ kfree(temp);
+ return n;
}
return simple_read_from_buffer(buf, size, ppos, "\n", 1);
}
--
2.17.1