Commit 9919dc4b authored by Michal Nazarewicz's avatar Michal Nazarewicz Committed by Ben Hutchings

usb: gadget: f_fs: fix NULL pointer dereference when there are no strings

commit f0688c8b upstream.

If the descriptors do not need any strings and user space sends empty
set of strings, the ffs->stringtabs field remains NULL.  Thus
*ffs->stringtabs in functionfs_bind leads to a NULL pointer
dereferenece.

The bug was introduced by commit [fd7c9a00: “use usb_string_ids_n()”].

While at it, remove double initialisation of lang local variable in
that function.

ffs->strings_count does not need to be checked in any way since in
the above scenario it will remain zero and usb_string_ids_n() is
a no-operation when colled with 0 argument.
Signed-off-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 23f2204d
...@@ -1376,11 +1376,13 @@ static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev) ...@@ -1376,11 +1376,13 @@ static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev)
ffs->ep0req->context = ffs; ffs->ep0req->context = ffs;
lang = ffs->stringtabs; lang = ffs->stringtabs;
for (lang = ffs->stringtabs; *lang; ++lang) { if (lang) {
struct usb_string *str = (*lang)->strings; for (; *lang; ++lang) {
int id = first_id; struct usb_string *str = (*lang)->strings;
for (; str->s; ++id, ++str) int id = first_id;
str->id = id; for (; str->s; ++id, ++str)
str->id = id;
}
} }
ffs->gadget = cdev->gadget; ffs->gadget = cdev->gadget;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment