]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: gadget/function/f_fs string table fix for multiple languages
authorDean Anderson <dean@sensoray.com>
Wed, 17 Mar 2021 22:41:09 +0000 (15:41 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 22 May 2021 08:38:20 +0000 (10:38 +0200)
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>
drivers/usb/gadget/function/f_fs.c

index deb0a87cd03b7f1cab48f305b9b540f4408409d3..c045d4176a9c498286a9da15c3ca8fefb6d967a1 100644 (file)
@@ -2341,6 +2341,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;
@@ -2376,7 +2377,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;