usb: gadget/function/f_fs string table fix for multiple languages
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>
This commit is contained in:
parent
84770f028f
commit
55b74ce7d2
@ -2640,6 +2640,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,
|
|||||||
|
|
||||||
do { /* lang_count > 0 so we can use do-while */
|
do { /* lang_count > 0 so we can use do-while */
|
||||||
unsigned needed = needed_count;
|
unsigned needed = needed_count;
|
||||||
|
u32 str_per_lang = str_count;
|
||||||
|
|
||||||
if (len < 3)
|
if (len < 3)
|
||||||
goto error_free;
|
goto error_free;
|
||||||
@ -2675,7 +2676,7 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,
|
|||||||
|
|
||||||
data += length + 1;
|
data += length + 1;
|
||||||
len -= length + 1;
|
len -= length + 1;
|
||||||
} while (--str_count);
|
} while (--str_per_lang);
|
||||||
|
|
||||||
s->id = 0; /* terminator */
|
s->id = 0; /* terminator */
|
||||||
s->s = NULL;
|
s->s = NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user