summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/manifest.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2016-04-13 19:18:55 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2016-04-21 10:03:13 +0900
commit7d963cbe8302d16d2171ecc729782f0d2e7cfbe7 (patch)
treebb950248555ed2bfae2fecf99288a534d557e161 /drivers/staging/greybus/manifest.c
parentd1d67714a4ece3c1438c9d7def324ee0424e7cbd (diff)
downloadlinux-7d963cbe8302d16d2171ecc729782f0d2e7cfbe7.tar.bz2
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>
Diffstat (limited to 'drivers/staging/greybus/manifest.c')
-rw-r--r--drivers/staging/greybus/manifest.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/staging/greybus/manifest.c b/drivers/staging/greybus/manifest.c
index 070afc619f84..cca4592c15ad 100644
--- a/drivers/staging/greybus/manifest.c
+++ b/drivers/staging/greybus/manifest.c
@@ -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);