* [PATCH 08/11] fix tt_command_write()
[not found] ` <20250702211408.GA3406663@ZenIV>
@ 2025-07-02 21:25 ` Al Viro
2025-07-03 11:14 ` Rafael J. Wysocki
0 siblings, 1 reply; 2+ messages in thread
From: Al Viro @ 2025-07-02 21:25 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: linux-fsdevel, linux-pm
1) unbalanced debugfs_file_get(). Not needed in the first place -
file_operations are accessed only via debugfs_create_file(), so
debugfs wrappers will take care of that itself.
2) kmalloc() for a buffer used only for duration of a function is not
a problem, but for a buffer no longer than 16 bytes?
3) strstr() is for finding substrings; for finding a character there's
strchr().
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
drivers/thermal/testing/command.c | 30 ++++++++++--------------------
1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/drivers/thermal/testing/command.c b/drivers/thermal/testing/command.c
index ba11d70e8021..1159ecea57e7 100644
--- a/drivers/thermal/testing/command.c
+++ b/drivers/thermal/testing/command.c
@@ -139,31 +139,21 @@ static int tt_command_exec(int index, const char *arg)
return ret;
}
-static ssize_t tt_command_process(struct dentry *dentry, const char __user *user_buf,
- size_t count)
+static ssize_t tt_command_process(char *s)
{
- char *buf __free(kfree);
char *arg;
int i;
- buf = kmalloc(count + 1, GFP_KERNEL);
- if (!buf)
- return -ENOMEM;
+ strim(s);
- if (copy_from_user(buf, user_buf, count))
- return -EFAULT;
-
- buf[count] = '\0';
- strim(buf);
-
- arg = strstr(buf, ":");
+ arg = strchr(s, ':');
if (arg) {
*arg = '\0';
arg++;
}
for (i = 0; i < ARRAY_SIZE(tt_command_strings); i++) {
- if (!strcmp(buf, tt_command_strings[i]))
+ if (!strcmp(s, tt_command_strings[i]))
return tt_command_exec(i, arg);
}
@@ -173,20 +163,20 @@ static ssize_t tt_command_process(struct dentry *dentry, const char __user *user
static ssize_t tt_command_write(struct file *file, const char __user *user_buf,
size_t count, loff_t *ppos)
{
- struct dentry *dentry = file->f_path.dentry;
+ char buf[TT_COMMAND_SIZE];
ssize_t ret;
if (*ppos)
return -EINVAL;
- if (count + 1 > TT_COMMAND_SIZE)
+ if (count > TT_COMMAND_SIZE - 1)
return -E2BIG;
- ret = debugfs_file_get(dentry);
- if (unlikely(ret))
- return ret;
+ if (copy_from_user(buf, user_buf, count))
+ return -EFAULT;
+ buf[count] = '\0';
- ret = tt_command_process(dentry, user_buf, count);
+ ret = tt_command_process(buf);
if (ret)
return ret;
--
2.39.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 08/11] fix tt_command_write()
2025-07-02 21:25 ` [PATCH 08/11] fix tt_command_write() Al Viro
@ 2025-07-03 11:14 ` Rafael J. Wysocki
0 siblings, 0 replies; 2+ messages in thread
From: Rafael J. Wysocki @ 2025-07-03 11:14 UTC (permalink / raw)
To: Al Viro; +Cc: Greg Kroah-Hartman, linux-fsdevel, linux-pm
On Wed, Jul 2, 2025 at 11:25 PM Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> 1) unbalanced debugfs_file_get(). Not needed in the first place -
> file_operations are accessed only via debugfs_create_file(), so
> debugfs wrappers will take care of that itself.
>
> 2) kmalloc() for a buffer used only for duration of a function is not
> a problem, but for a buffer no longer than 16 bytes?
>
> 3) strstr() is for finding substrings; for finding a character there's
> strchr().
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Or do you want me to apply this?
> ---
> drivers/thermal/testing/command.c | 30 ++++++++++--------------------
> 1 file changed, 10 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/thermal/testing/command.c b/drivers/thermal/testing/command.c
> index ba11d70e8021..1159ecea57e7 100644
> --- a/drivers/thermal/testing/command.c
> +++ b/drivers/thermal/testing/command.c
> @@ -139,31 +139,21 @@ static int tt_command_exec(int index, const char *arg)
> return ret;
> }
>
> -static ssize_t tt_command_process(struct dentry *dentry, const char __user *user_buf,
> - size_t count)
> +static ssize_t tt_command_process(char *s)
> {
> - char *buf __free(kfree);
> char *arg;
> int i;
>
> - buf = kmalloc(count + 1, GFP_KERNEL);
> - if (!buf)
> - return -ENOMEM;
> + strim(s);
>
> - if (copy_from_user(buf, user_buf, count))
> - return -EFAULT;
> -
> - buf[count] = '\0';
> - strim(buf);
> -
> - arg = strstr(buf, ":");
> + arg = strchr(s, ':');
> if (arg) {
> *arg = '\0';
> arg++;
> }
>
> for (i = 0; i < ARRAY_SIZE(tt_command_strings); i++) {
> - if (!strcmp(buf, tt_command_strings[i]))
> + if (!strcmp(s, tt_command_strings[i]))
> return tt_command_exec(i, arg);
> }
>
> @@ -173,20 +163,20 @@ static ssize_t tt_command_process(struct dentry *dentry, const char __user *user
> static ssize_t tt_command_write(struct file *file, const char __user *user_buf,
> size_t count, loff_t *ppos)
> {
> - struct dentry *dentry = file->f_path.dentry;
> + char buf[TT_COMMAND_SIZE];
> ssize_t ret;
>
> if (*ppos)
> return -EINVAL;
>
> - if (count + 1 > TT_COMMAND_SIZE)
> + if (count > TT_COMMAND_SIZE - 1)
> return -E2BIG;
>
> - ret = debugfs_file_get(dentry);
> - if (unlikely(ret))
> - return ret;
> + if (copy_from_user(buf, user_buf, count))
> + return -EFAULT;
> + buf[count] = '\0';
>
> - ret = tt_command_process(dentry, user_buf, count);
> + ret = tt_command_process(buf);
> if (ret)
> return ret;
>
> --
> 2.39.5
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-07-03 11:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250702211305.GE1880847@ZenIV>
[not found] ` <20250702211408.GA3406663@ZenIV>
2025-07-02 21:25 ` [PATCH 08/11] fix tt_command_write() Al Viro
2025-07-03 11:14 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox