drivers/usb/gadget/function/f_hid.c | 1 - 1 file changed, 1 deletion(-)
A failed copy_from_user() is a userspace error and should not spam the
kernel log. Just free the temporary entry and return.
Suggested-by: David Laight <david.laight.linux@gmail.com>
Signed-off-by: Linkai Gong <gonglinkai@kylinos.cn>
---
drivers/usb/gadget/function/f_hid.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index 3c6b43d06a6d..5c39da1ac7a6 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -656,7 +656,6 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
if (copy_from_user(&entry->report_data, buffer,
sizeof(struct usb_hidg_report))) {
- ERROR(cdev, "copy_from_user error\n");
kfree(entry);
return -EINVAL;
}
--
2.25.1
On Tue, 18 Aug 2026 09:21:18 +0800
Linkai Gong <gonglinkai@kylinos.cn> wrote:
> A failed copy_from_user() is a userspace error and should not spam the
> kernel log. Just free the temporary entry and return.
>
> Suggested-by: David Laight <david.laight.linux@gmail.com>
> Signed-off-by: Linkai Gong <gonglinkai@kylinos.cn>
> ---
> drivers/usb/gadget/function/f_hid.c | 1 -
> 1 file changed, 1 deletion(-)
> diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
> index 3c6b43d06a6d..5c39da1ac7a6 100644
> --- a/drivers/usb/gadget/function/f_hid.c
> +++ b/drivers/usb/gadget/function/f_hid.c
> @@ -656,7 +656,6 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
>
> if (copy_from_user(&entry->report_data, buffer,
> sizeof(struct usb_hidg_report))) {
> - ERROR(cdev, "copy_from_user error\n");
> kfree(entry);
> return -EINVAL;
This should be -EFAULT.
David
> }
>>>>> "Linkai" == Linkai Gong <gonglinkai@kylinos.cn> writes:
> A failed copy_from_user() is a userspace error and should not spam the
> kernel log. Just free the temporary entry and return.
> Suggested-by: David Laight <david.laight.linux@gmail.com>
> Signed-off-by: Linkai Gong <gonglinkai@kylinos.cn>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
> ---
> drivers/usb/gadget/function/f_hid.c | 1 -
> 1 file changed, 1 deletion(-)
> diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
> index 3c6b43d06a6d..5c39da1ac7a6 100644
> --- a/drivers/usb/gadget/function/f_hid.c
> +++ b/drivers/usb/gadget/function/f_hid.c
> @@ -656,7 +656,6 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
> if (copy_from_user(&entry->report_data, buffer,
> sizeof(struct usb_hidg_report))) {
> - ERROR(cdev, "copy_from_user error\n");
> kfree(entry);
> return -EINVAL;
> }
> --
> 2.25.1
--
Bye, Peter Korsgaard
A failed copy_from_user() is a userspace fault, not a kernel error.
Do not spam the log, and return -EFAULT instead of -EINVAL.
Suggested-by: David Laight <david.laight.linux@gmail.com>
Signed-off-by: Linkai Gong <gonglinkai@kylinos.cn>
---
v2:
- Return -EFAULT instead of -EINVAL (David Laight)
drivers/usb/gadget/function/f_hid.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index 3c6b43d06a6d..b8e1c0e0f1a2 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -656,9 +656,8 @@ static int f_hidg_get_report(struct file *file, struct usb_hidg_report __user *b
if (copy_from_user(&entry->report_data, buffer,
sizeof(struct usb_hidg_report))) {
- ERROR(cdev, "copy_from_user error\n");
kfree(entry);
- return -EINVAL;
+ return -EFAULT;
}
report_id = entry->report_data.report_id;
--
2.25.1
© 2016 - 2026 Red Hat, Inc.