summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDean Anderson <dean@sensoray.com>2021-03-18 01:41:09 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-05-22 11:59:22 +0300
commita8c6efee24c466447a19d255b686099d8b6e9817 (patch)
treeb12d2b215ee92abe1f8b8ec2ae64849d047771f7
parent27876060e2995440cb61a06c341d1592098f29c0 (diff)
downloadlinux-a8c6efee24c466447a19d255b686099d8b6e9817.tar.xz
usb: gadget/function/f_fs string table fix for multiple languages
commit 55b74ce7d2ce0b0058f3e08cab185a0afacfe39e upstream. Fixes bug with the handling of more than one language in the string table in f_fs.c. str_count was not reset for subsequent language codes. str_count-- "rolls under" and processes u32 max strings on the processing of the second language entry. The existing bug can be reproduced by adding a second language table to the structure "strings" in tools/usb/ffs-test.c. Signed-off-by: Dean Anderson <dean@sensoray.com> Link: https://lore.kernel.org/r/20210317224109.21534-1-dean@sensoray.com Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/gadget/function/f_fs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index 5c1846d1372e..dcb432860d06 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -2553,6 +2553,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,
do { /* lang_count > 0 so we can use do-while */
unsigned needed = needed_count;
+ u32 str_per_lang = str_count;
if (unlikely(len < 3))
goto error_free;
@@ -2588,7 +2589,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,
data += length + 1;
len -= length + 1;
- } while (--str_count);
+ } while (--str_per_lang);
s->id = 0; /* terminator */
s->s = NULL;