fix(ff-a): fix memory send/retrieve error code on attributes validation
Memory send (share/lend/donate) and retrieve should return FFA_DENIED
and not FFA_INVALID_PARAMETERS when called with unsupported memory
type/attributes.
Change-Id: I604f1fddaea38f1d38eb33bb8f568121738b2a1c
Signed-off-by: Federico Recanati <federico.recanati@arm.com>
diff --git a/src/ffa_memory.c b/src/ffa_memory.c
index 773e588..98fd688 100644
--- a/src/ffa_memory.c
+++ b/src/ffa_memory.c
@@ -1360,21 +1360,21 @@
if (memory_type != FFA_MEMORY_NORMAL_MEM) {
dlog_verbose("Invalid memory type %#x, expected %#x.\n",
memory_type, FFA_MEMORY_NORMAL_MEM);
- return ffa_error(FFA_INVALID_PARAMETERS);
+ return ffa_error(FFA_DENIED);
}
cacheability = ffa_get_memory_cacheability_attr(attributes);
if (cacheability != FFA_MEMORY_CACHE_WRITE_BACK) {
dlog_verbose("Invalid cacheability %#x, expected %#x.\n",
cacheability, FFA_MEMORY_CACHE_WRITE_BACK);
- return ffa_error(FFA_INVALID_PARAMETERS);
+ return ffa_error(FFA_DENIED);
}
shareability = ffa_get_memory_shareability_attr(attributes);
if (shareability != FFA_MEMORY_INNER_SHAREABLE) {
dlog_verbose("Invalid shareability %#x, expected #%x.\n",
shareability, FFA_MEMORY_INNER_SHAREABLE);
- return ffa_error(FFA_INVALID_PARAMETERS);
+ return ffa_error(FFA_DENIED);
}
return (struct ffa_value){.func = FFA_SUCCESS_32};
diff --git a/test/vmapi/primary_with_secondaries/memory_sharing.c b/test/vmapi/primary_with_secondaries/memory_sharing.c
index 30a3671..6080709 100644
--- a/test/vmapi/primary_with_secondaries/memory_sharing.c
+++ b/test/vmapi/primary_with_secondaries/memory_sharing.c
@@ -2230,8 +2230,7 @@
for (uint32_t j = 0; j < ARRAY_SIZE(send_function); j++) {
ret = send_function[j](msg_size, msg_size);
EXPECT_EQ(ret.func, FFA_ERROR_32);
- EXPECT_TRUE(ffa_error_code(ret) ==
- FFA_INVALID_PARAMETERS);
+ EXPECT_EQ(ffa_error_code(ret), FFA_DENIED);
}
}
}
@@ -2329,8 +2328,7 @@
{.address = (uint64_t)pages + PAGE_SIZE * 3, .page_count = 1},
};
- SERVICE_SELECT(SERVICE_VM1, "ffa_memory_share_fail_invalid_parameters",
- mb.send);
+ SERVICE_SELECT(SERVICE_VM1, "ffa_memory_share_fail_denied", mb.send);
struct {
enum ffa_memory_type memory_type;