fix(memory share): multiple borrower with NWd VM
The validity checks from the condition `plat_ffa_is_memory_send_valid`
didn't allow for a memory lend/share operation with multiple borrowers,
in case one of the borrowers is from the NWd.
Signed-off-by: J-Alves <joao.alves@arm.com>
Change-Id: I56b753c97085bd99f40659635a3dab6d83e45b70
diff --git a/src/api.c b/src/api.c
index f2118d4..5221f87 100644
--- a/src/api.c
+++ b/src/api.c
@@ -3518,8 +3518,11 @@
for (uint32_t i = 0U; i < memory_region->receiver_count; i++) {
struct ffa_memory_access *receiver =
ffa_memory_region_get_receiver(memory_region, i);
+ ffa_id_t receiver_id;
+
assert(receiver != NULL);
- ffa_id_t receiver_id = receiver->receiver_permissions.receiver;
+
+ receiver_id = receiver->receiver_permissions.receiver;
to = vm_find(receiver_id);
@@ -3530,7 +3533,9 @@
goto out;
}
- if (!plat_ffa_is_memory_send_valid(receiver_id, share_func)) {
+ if (!plat_ffa_is_memory_send_valid(
+ receiver_id, from->id, share_func,
+ memory_region->receiver_count > 1)) {
ret = ffa_error(FFA_DENIED);
goto out;
}