greybus: manifest: Warn if descriptor size > expected size
authorViresh Kumar <viresh.kumar@linaro.org>
Wed, 29 Apr 2015 05:32:08 +0000 (11:02 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 29 Apr 2015 13:55:21 +0000 (15:55 +0200)
A descriptor passed to AP can be bigger than what AP expects, if
manifest's minor version is higher with same major number as the AP. As
it can have some extra data in descriptor.

But, if AP and manifest versions are identical, or if the AP's minor
version is greater than the manifest version, we should at least warn
(if not fail).

Doing this would require some changes to record the manifest version
somewhere reachable by identify_descriptor().

For now, just warn if descriptor is bigger than expected.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/manifest.c

index 12536637536c93f9ff328bc6a0ce307065c5c497..2346ead2a977dce823e0f9128846b5112b7f1795 100644 (file)
@@ -129,6 +129,13 @@ static int identify_descriptor(struct gb_interface *intf,
                return -EINVAL;
        }
 
+       /* Descriptor bigger than what we expect */
+       if (desc_size > expected_size) {
+               pr_warn("%s descriptor size mismatch (want %zu got %zu)\n",
+                       get_descriptor_type_string(desc_header->type),
+                       expected_size, desc_size);
+       }
+
        descriptor = kzalloc(sizeof(*descriptor), GFP_KERNEL);
        if (!descriptor)
                return -ENOMEM;