Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0688c8b authored by Michal Nazarewicz's avatar Michal Nazarewicz Committed by Felipe Balbi
Browse files

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



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.

Cc: <stable@vger.kernel.org>  # v2.6.36+
Signed-off-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 82363cf2
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -1483,12 +1483,14 @@ 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) {
		for (; *lang; ++lang) {
			struct usb_string *str = (*lang)->strings;
			struct usb_string *str = (*lang)->strings;
			int id = first_id;
			int id = first_id;
			for (; str->s; ++id, ++str)
			for (; str->s; ++id, ++str)
				str->id = id;
				str->id = id;
		}
		}
	}


	ffs->gadget = cdev->gadget;
	ffs->gadget = cdev->gadget;
	ffs_data_get(ffs);
	ffs_data_get(ffs);