aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/function/uvc_configfs.c
diff options
context:
space:
mode:
authorMichael Grzeschik <m.grzeschik@pengutronix.de>2022-07-07 13:56:12 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-07-08 14:58:25 +0200
commit3d0dc539029b09fbd125444c16b11a8ed10b9d0f (patch)
treeaa1d9621110c19a0010bb1f07acf1c85ccb2e284 /drivers/usb/gadget/function/uvc_configfs.c
parentusb: typec: add missing uevent when partner support PD (diff)
downloadlinux-dev-3d0dc539029b09fbd125444c16b11a8ed10b9d0f.tar.xz
linux-dev-3d0dc539029b09fbd125444c16b11a8ed10b9d0f.zip
usb: gadget: uvc: fix changing interface name via configfs
When setting the function name, it is always truncated by one char since snprintf is always including the null-termination in the len parameter. We use strscpy and fix the size setting to use len + 1 instead. Fixes: 324e4f85070f ("usb: gadget: uvc: allow changing interface name via configfs") Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Link: https://lore.kernel.org/r/20220707115612.2760569-1-m.grzeschik@pengutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to '')
-rw-r--r--drivers/usb/gadget/function/uvc_configfs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
index e5a6b6e36b3d..4303a3283ba0 100644
--- a/drivers/usb/gadget/function/uvc_configfs.c
+++ b/drivers/usb/gadget/function/uvc_configfs.c
@@ -2371,6 +2371,7 @@ static ssize_t f_uvc_opts_string_##cname##_store(struct config_item *item,\
const char *page, size_t len) \
{ \
struct f_uvc_opts *opts = to_f_uvc_opts(item); \
+ int size = min(sizeof(opts->aname), len + 1); \
int ret = 0; \
\
mutex_lock(&opts->lock); \
@@ -2379,8 +2380,9 @@ static ssize_t f_uvc_opts_string_##cname##_store(struct config_item *item,\
goto end; \
} \
\
- ret = snprintf(opts->aname, min(sizeof(opts->aname), len), \
- "%s", page); \
+ ret = strscpy(opts->aname, page, size); \
+ if (ret == -E2BIG) \
+ ret = size - 1; \
\
end: \
mutex_unlock(&opts->lock); \