greybus: manifest: fix illegal free in error path

The manifest-parsing code could end up leaving the interface
vendor_string set to an error pointer that we'd eventually try to free
when destroying the interface.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2016-04-13 19:18:55 +02:00 коммит произвёл Greg Kroah-Hartman
Родитель d1d67714a4
Коммит 7d963cbe83
1 изменённых файлов: 7 добавлений и 4 удалений

Просмотреть файл

@ -384,15 +384,18 @@ static bool gb_manifest_parse_interface(struct gb_interface *intf,
struct manifest_desc *interface_desc)
{
struct greybus_descriptor_interface *desc_intf = interface_desc->data;
char *str;
/* Handle the strings first--they can fail */
intf->vendor_string = gb_string_get(intf, desc_intf->vendor_stringid);
if (IS_ERR(intf->vendor_string))
str = gb_string_get(intf, desc_intf->vendor_stringid);
if (IS_ERR(str))
return false;
intf->vendor_string = str;
intf->product_string = gb_string_get(intf, desc_intf->product_stringid);
if (IS_ERR(intf->product_string))
str = gb_string_get(intf, desc_intf->product_stringid);
if (IS_ERR(str))
goto out_free_vendor_string;
intf->product_string = str;
/* Release the interface descriptor, now that we're done with it */
release_manifest_descriptor(interface_desc);