libpldm: Fix validation in decode_get_firmware_parameters_resp
If the completion code is not PLDM_SUCCESS, typically the payload
just has the completion code. Correct the validation checks to
address this.
Tested: Updated the test cases and tests passed.
Signed-off-by: Tom Joseph <rushtotom@gmail.com>
Change-Id: I27f67c070140693ec0c60f8d79fa2fff96b3cc93
diff --git a/libpldm/firmware_update.c b/libpldm/firmware_update.c
index 12043a2..5427c95 100644
--- a/libpldm/firmware_update.c
+++ b/libpldm/firmware_update.c
@@ -450,10 +450,15 @@
if (msg == NULL || resp_data == NULL ||
active_comp_image_set_ver_str == NULL ||
pending_comp_image_set_ver_str == NULL ||
- comp_parameter_table == NULL) {
+ comp_parameter_table == NULL || !payload_length) {
return PLDM_ERROR_INVALID_DATA;
}
+ resp_data->completion_code = msg->payload[0];
+ if (PLDM_SUCCESS != resp_data->completion_code) {
+ return PLDM_SUCCESS;
+ }
+
if (payload_length < sizeof(struct pldm_get_firmware_parameters_resp)) {
return PLDM_ERROR_INVALID_LENGTH;
}
@@ -461,12 +466,6 @@
struct pldm_get_firmware_parameters_resp *response =
(struct pldm_get_firmware_parameters_resp *)msg->payload;
- resp_data->completion_code = response->completion_code;
-
- if (PLDM_SUCCESS != resp_data->completion_code) {
- return PLDM_SUCCESS;
- }
-
if (!is_string_type_valid(
response->active_comp_image_set_ver_str_type) ||
(response->active_comp_image_set_ver_str_len == 0)) {