Skip to content

Commit 73d6a10

Browse files
nandojvehenrikbrixandersen
authored andcommitted
mgmt: updatehub: Fix json arrays
After the changes introduced by #50816 the UpdateHub could not decode anymore the JSON object. This introduce missing parsing definitions to allow JSON parser undertood the correct UpdateHub probe object. Fixes #69297 Signed-off-by: Gerson Fernando Budke <[email protected]> (cherry picked from commit 5fb62ca)
1 parent c515663 commit 73d6a10

File tree

2 files changed

+52
-16
lines changed

2 files changed

+52
-16
lines changed

subsys/mgmt/updatehub/updatehub.c

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -847,19 +847,31 @@ enum updatehub_response z_impl_updatehub_probe(void)
847847
recv_probe_sh_string_descr,
848848
ARRAY_SIZE(recv_probe_sh_string_descr),
849849
&metadata_any_boards) < 0) {
850-
LOG_ERR("Could not parse json");
850+
LOG_ERR("Could not parse the json");
851851
ctx.code_status = UPDATEHUB_METADATA_ERROR;
852852
goto cleanup;
853853
}
854854

855+
LOG_DBG("elements: %d", metadata_any_boards.objects_len);
856+
for (size_t i = 0; i < metadata_any_boards.objects_len; ++i) {
857+
LOG_DBG("obj[%d].elements: %d",
858+
i, metadata_any_boards.objects[i].objects_len);
859+
for (size_t j = 0; j < metadata_any_boards.objects[i].objects_len; ++j) {
860+
struct resp_probe_objects *obj =
861+
&metadata_any_boards.objects[i].objects[j].objects;
862+
LOG_DBG("\tMode: %s\n\tSHA: %s\n\tSize: %d",
863+
obj->mode, obj->sha256sum, obj->size);
864+
}
865+
}
866+
855867
if (metadata_any_boards.objects_len != 2) {
856-
LOG_ERR("Could not parse json");
868+
LOG_ERR("Object length of type 'any metadata' is incorrect");
857869
ctx.code_status = UPDATEHUB_METADATA_ERROR;
858870
goto cleanup;
859871
}
860872

861873
sha256size = strlen(
862-
metadata_any_boards.objects[1].objects.sha256sum) + 1;
874+
metadata_any_boards.objects[1].objects[0].objects.sha256sum) + 1;
863875

864876
if (sha256size != SHA256_HEX_DIGEST_SIZE) {
865877
LOG_ERR("SHA256 size is invalid");
@@ -868,14 +880,26 @@ enum updatehub_response z_impl_updatehub_probe(void)
868880
}
869881

870882
memcpy(update_info.sha256sum_image,
871-
metadata_any_boards.objects[1].objects.sha256sum,
883+
metadata_any_boards.objects[1].objects[0].objects.sha256sum,
872884
SHA256_HEX_DIGEST_SIZE);
873-
update_info.image_size = metadata_any_boards.objects[1].objects.size;
885+
update_info.image_size = metadata_any_boards.objects[1].objects[0].objects.size;
874886
LOG_DBG("metadata_any: %s",
875887
update_info.sha256sum_image);
876888
} else {
889+
LOG_DBG("elements: %d\n", metadata_some_boards.objects_len);
890+
for (size_t i = 0; i < metadata_some_boards.objects_len; ++i) {
891+
LOG_DBG("obj[%d].elements: %d\n",
892+
i, metadata_some_boards.objects[i].objects_len);
893+
for (size_t j = 0; j < metadata_some_boards.objects[i].objects_len; ++j) {
894+
struct resp_probe_objects *obj =
895+
&metadata_some_boards.objects[i].objects[j].objects;
896+
LOG_DBG("\tMode: %s\n\tSHA: %s\n\tSize: %d\n",
897+
obj->mode, obj->sha256sum, obj->size);
898+
}
899+
}
900+
877901
if (metadata_some_boards.objects_len != 2) {
878-
LOG_ERR("Could not parse json");
902+
LOG_ERR("Object length of type 'some metadata' is incorrect");
879903
ctx.code_status = UPDATEHUB_METADATA_ERROR;
880904
goto cleanup;
881905
}
@@ -888,7 +912,7 @@ enum updatehub_response z_impl_updatehub_probe(void)
888912
}
889913

890914
sha256size = strlen(
891-
metadata_some_boards.objects[1].objects.sha256sum) + 1;
915+
metadata_some_boards.objects[1].objects[0].objects.sha256sum) + 1;
892916

893917
if (sha256size != SHA256_HEX_DIGEST_SIZE) {
894918
LOG_ERR("SHA256 size is invalid");
@@ -897,10 +921,10 @@ enum updatehub_response z_impl_updatehub_probe(void)
897921
}
898922

899923
memcpy(update_info.sha256sum_image,
900-
metadata_some_boards.objects[1].objects.sha256sum,
924+
metadata_some_boards.objects[1].objects[0].objects.sha256sum,
901925
SHA256_HEX_DIGEST_SIZE);
902926
update_info.image_size =
903-
metadata_some_boards.objects[1].objects.size;
927+
metadata_some_boards.objects[1].objects[0].objects.size;
904928
LOG_DBG("metadata_some: %s",
905929
update_info.sha256sum_image);
906930
}
@@ -942,7 +966,7 @@ enum updatehub_response z_impl_updatehub_update(void)
942966

943967
if (updatehub_storage_mark_partition_to_upgrade(&ctx.storage_ctx,
944968
UPDATEHUB_SLOT_PARTITION_1)) {
945-
LOG_ERR("Could not reporting downloaded state");
969+
LOG_ERR("Could not mark partition to upgrade");
946970
ctx.code_status = UPDATEHUB_INSTALL_ERROR;
947971
goto error;
948972
}

subsys/mgmt/updatehub/updatehub_priv.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,20 @@ struct resp_probe_objects_array {
9797
struct resp_probe_objects objects;
9898
};
9999

100+
struct resp_probe_objects_array_array {
101+
struct resp_probe_objects_array objects[4];
102+
size_t objects_len;
103+
};
104+
100105
struct resp_probe_any_boards {
101-
struct resp_probe_objects_array objects[2];
106+
struct resp_probe_objects_array_array objects[2];
102107
size_t objects_len;
103108
const char *product;
104109
const char *supported_hardware;
105110
};
106111

107112
struct resp_probe_some_boards {
108-
struct resp_probe_objects_array objects[2];
113+
struct resp_probe_objects_array_array objects[2];
109114
size_t objects_len;
110115
const char *product;
111116
const char *supported_hardware[CONFIG_UPDATEHUB_SUPPORTED_HARDWARE_MAX];
@@ -148,6 +153,13 @@ static const struct json_obj_descr recv_probe_objects_descr_array[] = {
148153
objects, recv_probe_objects_descr),
149154
};
150155

156+
static const struct json_obj_descr recv_probe_objects_descr_array_array[] = {
157+
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_objects_array_array,
158+
objects, 4, objects_len,
159+
recv_probe_objects_descr_array,
160+
ARRAY_SIZE(recv_probe_objects_descr_array)),
161+
};
162+
151163
static const struct json_obj_descr recv_probe_sh_string_descr[] = {
152164
JSON_OBJ_DESCR_PRIM(struct resp_probe_any_boards,
153165
product, JSON_TOK_STRING),
@@ -156,8 +168,8 @@ static const struct json_obj_descr recv_probe_sh_string_descr[] = {
156168
JSON_TOK_STRING),
157169
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_any_boards,
158170
objects, 2, objects_len,
159-
recv_probe_objects_descr_array,
160-
ARRAY_SIZE(recv_probe_objects_descr_array)),
171+
recv_probe_objects_descr_array_array,
172+
ARRAY_SIZE(recv_probe_objects_descr_array_array)),
161173
};
162174

163175
static const struct json_obj_descr recv_probe_sh_array_descr[] = {
@@ -169,8 +181,8 @@ static const struct json_obj_descr recv_probe_sh_array_descr[] = {
169181
supported_hardware_len, JSON_TOK_STRING),
170182
JSON_OBJ_DESCR_ARRAY_ARRAY(struct resp_probe_some_boards,
171183
objects, 2, objects_len,
172-
recv_probe_objects_descr_array,
173-
ARRAY_SIZE(recv_probe_objects_descr_array)),
184+
recv_probe_objects_descr_array_array,
185+
ARRAY_SIZE(recv_probe_objects_descr_array_array)),
174186
};
175187

176188
static const struct json_obj_descr device_identity_descr[] = {

0 commit comments

Comments
 (0)