diff --git a/drivers/staging/greybus/manifest.c b/drivers/staging/greybus/manifest.c
index f0468d768fe7..43ece7403c77 100644
--- a/drivers/staging/greybus/manifest.c
+++ b/drivers/staging/greybus/manifest.c
@@ -113,7 +113,7 @@ static int identify_descriptor(struct greybus_descriptor *desc, size_t size)
 		return -ENOMEM;
 
 	descriptor->size = desc_size;
-	descriptor->data = desc;
+	descriptor->data = (u8 *)desc + sizeof(*desc_header);
 	descriptor->type = desc_header->type;
 	list_add_tail(&descriptor->links, &manifest_descs);
 
@@ -143,13 +143,11 @@ static char *gb_string_get(u8 string_id)
 		return NULL;
 
 	list_for_each_entry(descriptor, &manifest_descs, links) {
-		struct greybus_descriptor *desc;
 
 		if (descriptor->type != GREYBUS_TYPE_STRING)
 			continue;
 
-		desc = descriptor->data;
-		desc_string = &desc->string;
+		desc_string = descriptor->data;
 		if (desc_string->id == string_id) {
 			found = true;
 			break;
@@ -262,8 +260,7 @@ static u32 gb_manifest_parse_interfaces(struct gb_module *gmod)
 static bool gb_manifest_parse_module(struct gb_module *gmod,
 					struct manifest_desc *module_desc)
 {
-	struct greybus_descriptor *desc = module_desc->data;
-	struct greybus_descriptor_module *desc_module = &desc->module;
+	struct greybus_descriptor_module *desc_module = module_desc->data;
 
 	/* Handle the strings first--they can fail */
 	gmod->vendor_string = gb_string_get(desc_module->vendor_stringid);