dsp: firmware_update: Initialize msgbuf after argument tests
The msgbuf APIs are being reworked to improve soundness and error
reporting. Prior to introducing some new requirements on its users,
ensure its init/destroy sequences have minimal code spans.
This effort surfaced a problem with a test configuration for
encode_get_downstream_firmware_parameters_req() which was passing
an invalid transfer operation flag. Previously this was masked by a
buffer-length validation failure.
Change-Id: I7259ac86d696da425ac9d919e6864dfb238d8996
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/src/dsp/firmware_update.c b/src/dsp/firmware_update.c
index 534d068..a52fdf6 100644
--- a/src/dsp/firmware_update.c
+++ b/src/dsp/firmware_update.c
@@ -1392,13 +1392,6 @@
return -EINVAL;
}
- rc = pldm_msgbuf_init_errno(
- buf, PLDM_GET_DOWNSTREAM_FIRMWARE_PARAMETERS_REQ_BYTES,
- msg->payload, payload_length);
- if (rc < 0) {
- return rc;
- }
-
if (!is_transfer_operation_flag_valid(
(enum transfer_op_flag)
params_req->transfer_operation_flag)) {
@@ -1415,6 +1408,13 @@
return rc;
}
+ rc = pldm_msgbuf_init_errno(
+ buf, PLDM_GET_DOWNSTREAM_FIRMWARE_PARAMETERS_REQ_BYTES,
+ msg->payload, payload_length);
+ if (rc < 0) {
+ return rc;
+ }
+
pldm_msgbuf_insert(buf, params_req->data_transfer_handle);
// Data correctness has been verified, cast it to 1-byte data directly.
pldm_msgbuf_insert(buf, params_req->transfer_operation_flag);