aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Vizzarro <Luca.Vizzarro@arm.com>2020-10-08 19:16:32 +0100
committernicola-mazzucato-arm <42373140+nicola-mazzucato-arm@users.noreply.github.com>2020-10-22 14:39:59 +0100
commit13642a54143ee2de26c2d39c2ca814a9025106fd (patch)
tree7d89720f7914a0f3ca159adc0af5c47d7a7781da
parentd5eece312a6f2863e0ee27124aa20af70b4c13b9 (diff)
mod_scmi_reset: Fix reset invalid params
As per section 4.8.2.5 of the SCMI v2 spec, the request flags bits 31 to 3 must be set to zero. With this, this commit enforces this requirement by returning SCMI_INVALID_PARAMETERS whenever any of these bits are set. Change-Id: Ic5c327a78e6864fd759864b9b2c780aac2d021d6 Signed-off-by: Luca Vizzarro <Luca.Vizzarro@arm.com>
-rw-r--r--module/scmi_reset_domain/include/internal/scmi_reset_domain.h3
-rw-r--r--module/scmi_reset_domain/src/mod_scmi_reset_domain.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/module/scmi_reset_domain/include/internal/scmi_reset_domain.h b/module/scmi_reset_domain/include/internal/scmi_reset_domain.h
index a9169d93..bedd4273 100644
--- a/module/scmi_reset_domain/include/internal/scmi_reset_domain.h
+++ b/module/scmi_reset_domain/include/internal/scmi_reset_domain.h
@@ -67,6 +67,9 @@ struct scmi_reset_domain_attributes_p2a {
#define SCMI_RESET_DOMAIN_ASYNC (1 << 2)
#define SCMI_RESET_DOMAIN_EXPLICIT (1 << 1)
#define SCMI_RESET_DOMAIN_AUTO (1 << 0)
+#define SCMI_RESET_DOMAIN_FLAGS_MASK \
+ (SCMI_RESET_DOMAIN_ASYNC | SCMI_RESET_DOMAIN_EXPLICIT | \
+ SCMI_RESET_DOMAIN_AUTO)
struct scmi_reset_domain_request_a2p {
uint32_t domain_id;
diff --git a/module/scmi_reset_domain/src/mod_scmi_reset_domain.c b/module/scmi_reset_domain/src/mod_scmi_reset_domain.c
index 3b930a72..f2949758 100644
--- a/module/scmi_reset_domain/src/mod_scmi_reset_domain.c
+++ b/module/scmi_reset_domain/src/mod_scmi_reset_domain.c
@@ -308,6 +308,12 @@ static int reset_request_handler(fwk_id_t service_id,
params = *(const struct scmi_reset_domain_request_a2p *)payload;
+ if ((params.flags & ~SCMI_RESET_DOMAIN_FLAGS_MASK) != 0) {
+ status = FWK_SUCCESS;
+ outmsg.status = SCMI_INVALID_PARAMETERS;
+ goto exit;
+ }
+
status = scmi_rd_ctx.scmi_api->get_agent_id(service_id, &agent_id);
if (status != FWK_SUCCESS)
goto exit;