Commit d6fba3db authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

greybus: manifest: check for duplicate CPort descriptors when parsing

Now that connection creation has been separated from interface
initialisation, we should explicitly check for duplicate CPort
descriptors when parsing the manifest.
Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 98fdf5a0
...@@ -230,8 +230,7 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle) ...@@ -230,8 +230,7 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
{ {
struct gb_interface *intf = bundle->intf; struct gb_interface *intf = bundle->intf;
struct greybus_descriptor_cport *desc_cport; struct greybus_descriptor_cport *desc_cport;
struct manifest_desc *desc; struct manifest_desc *desc, *next, *tmp;
struct manifest_desc *next;
LIST_HEAD(list); LIST_HEAD(list);
u8 bundle_id = bundle->id; u8 bundle_id = bundle->id;
u16 cport_id; u16 cport_id;
...@@ -251,7 +250,19 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle) ...@@ -251,7 +250,19 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
if (cport_id > CPORT_ID_MAX) if (cport_id > CPORT_ID_MAX)
goto exit; goto exit;
/* Found one, move it to our temporary list. */ /*
* Found one, move it to our temporary list after checking for
* duplicates.
*/
list_for_each_entry(tmp, &list, links) {
desc_cport = tmp->data;
if (cport_id == desc_cport->id) {
dev_err(&bundle->dev,
"duplicate CPort %u found\n",
cport_id);
goto exit;
}
}
list_move(&desc->links, &list); list_move(&desc->links, &list);
count++; count++;
} }
......
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