fix(ffa): add check for 'Address Range Alignemnt Hint'
FFA_MEM_RETRIEVE_REQ ABI defines a 'Address Range Alignment Hint'
which is curently not supported by Hafnium.
Adding a check to ensure the field is 0, returning
FFA_INVALID_PARAMETERS otherwise.
Improving the already existing `ffa_validate_retrieve_req_mbz` unit
test to take into account this field as well.
Change-Id: I1827b929c7b5a26cd874b5984c7de198f1d6be25
Signed-off-by: Federico Recanati <federico.recanati@arm.com>
diff --git a/src/ffa_memory.c b/src/ffa_memory.c
index f51bbd8..d68636c 100644
--- a/src/ffa_memory.c
+++ b/src/ffa_memory.c
@@ -1460,6 +1460,7 @@
*permissions);
return ffa_error(FFA_INVALID_PARAMETERS);
}
+
if (share_func == FFA_MEM_DONATE_32 &&
data_access != FFA_DATA_ACCESS_NOT_SPECIFIED) {
dlog_verbose(
@@ -2250,6 +2251,23 @@
goto out;
}
+ if ((retrieve_request->flags &
+ FFA_MEMORY_REGION_ADDRESS_RANGE_HINT_VALID) != 0) {
+ dlog_verbose(
+ "Retriever specified 'address range alignment hint'"
+ " not supported.\n");
+ ret = ffa_error(FFA_INVALID_PARAMETERS);
+ goto out;
+ }
+ if ((retrieve_request->flags &
+ FFA_MEMORY_REGION_ADDRESS_RANGE_HINT_MASK) != 0) {
+ dlog_verbose(
+ "Bits 8-5 must be zero in memory region's flags "
+ "(address range alignment hint not supported).\n");
+ ret = ffa_error(FFA_INVALID_PARAMETERS);
+ goto out;
+ }
+
if ((retrieve_request->flags & ~0x7FF) != 0U) {
dlog_verbose(
"Bits 31-10 must be zero in memory region's flags.\n");