Re: [PATCH] arch:powerpc simple_write_to_buffer return check
From: Mayank Suman <hidden>
Date: 2021-02-05 06:15:15
Also in:
lkml
On 05/02/21 4:05 am, Oliver O'Halloran wrote:
On Fri, Feb 5, 2021 at 5:17 AM Mayank Suman [off-list ref] wrote:quoted
Signed-off-by: Mayank Suman <redacted>commit messages aren't optional
Sorry. I will include the commit message in PATCH v2.
quoted
--- arch/powerpc/kernel/eeh.c | 8 ++++---- arch/powerpc/platforms/powernv/eeh-powernv.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-)diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c index 813713c9120c..2dbe1558a71f 100644 --- a/arch/powerpc/kernel/eeh.c +++ b/arch/powerpc/kernel/eeh.c@@ -1628,8 +1628,8 @@ static ssize_t eeh_force_recover_write(struct file *filp, char buf[20]; int ret; - ret = simple_write_to_buffer(buf, sizeof(buf), ppos, user_buf, count); - if (!ret) + ret = simple_write_to_buffer(buf, sizeof(buf)-1, ppos, user_buf, count);We should probably be zeroing the buffer. Reading to sizeof(buf) - 1 is done in a few places to guarantee that the string is nul terminated, but without the preceeding memset() that isn't actually guaranteed.
Yes, the buffer should be zeroed out first. I have included memset() in Patch v2.
quoted
+ if (ret <= 0) return -EFAULT;EFAULT is supposed to be returned when the user supplies a buffer to write(2) which is outside their address space. I figured letting the sscanf() in the next step fail if the user passes writes a zero-length buffer and returning EINVAL made more sense. That said, the exact semantics around zero length writes are pretty handwavy so I guess this isn't wrong, but I don't think it's better either.
simple_write_to_buffer may return negative value on fail. So, -EFAULT should be return in case of negative return value. The conditional (!ret) was not sufficient to catch negative return value.