Add helper function for calculating offset to first constituent.
Change-Id: I436d91eb99bbfa178faa30cbb70a895f693aab83
diff --git a/src/ffa_memory.c b/src/ffa_memory.c
index 6ca8a51..e6ab21e 100644
--- a/src/ffa_memory.c
+++ b/src/ffa_memory.c
@@ -1097,6 +1097,7 @@
{
struct ffa_composite_memory_region *composite;
uint32_t receivers_length;
+ uint32_t constituents_offset;
uint32_t constituents_length;
enum ffa_data_access data_access;
enum ffa_instruction_access instruction_access;
@@ -1122,13 +1123,16 @@
*/
receivers_length = sizeof(struct ffa_memory_access) *
memory_region->receiver_count;
+ constituents_offset =
+ ffa_composite_constituent_offset(memory_region, 0);
if (memory_region->receivers[0].composite_memory_region_offset <
sizeof(struct ffa_memory_region) + receivers_length ||
- memory_region->receivers[0].composite_memory_region_offset +
- sizeof(struct ffa_composite_memory_region) >=
- memory_share_length) {
+ constituents_offset >= memory_share_length) {
dlog_verbose(
- "Invalid composite memory region descriptor offset.\n");
+ "Invalid composite memory region descriptor offset "
+ "%d.\n",
+ memory_region->receivers[0]
+ .composite_memory_region_offset);
return ffa_error(FFA_INVALID_PARAMETERS);
}
@@ -1139,11 +1143,8 @@
*/
constituents_length = sizeof(struct ffa_memory_region_constituent) *
composite->constituent_count;
- if (memory_share_length !=
- memory_region->receivers[0].composite_memory_region_offset +
- sizeof(struct ffa_composite_memory_region) +
- constituents_length) {
- dlog_verbose("Invalid length %d or constituent offset %d.\n",
+ if (memory_share_length != constituents_offset + constituents_length) {
+ dlog_verbose("Invalid length %d or composite offset %d.\n",
memory_share_length,
memory_region->receivers[0]
.composite_memory_region_offset);