From 0dc35186669ddaedb3a932e103c3976bc3bf75d6 Mon Sep 17 00:00:00 2001 From: Marc Bonnici Date: Tue, 18 Oct 2022 13:50:04 +0100 Subject: [PATCH] fix(el3-spmc): fix detection of overlapping memory regions The current logic does not cover all scenarios of overlapping memory regions. Update the implementation to verify non-overlapping regions instead. Reported by Matt Oh, Google Android Red Team. Reported-by: mattoh@google.com Signed-off-by: Marc Bonnici Change-Id: I16c53d081e4455bc0e28399d28a1b27b1a9eb49c --- services/std_svc/spm/el3_spmc/spmc_shared_mem.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/services/std_svc/spm/el3_spmc/spmc_shared_mem.c b/services/std_svc/spm/el3_spmc/spmc_shared_mem.c index f7911b9b3..6f6d273d6 100644 --- a/services/std_svc/spm/el3_spmc/spmc_shared_mem.c +++ b/services/std_svc/spm/el3_spmc/spmc_shared_mem.c @@ -330,10 +330,9 @@ overlapping_memory_regions(struct ffa_comp_mrd *region1, PAGE_SIZE_4KB; region2_end = region2_start + region2_size; - if ((region1_start >= region2_start && - region1_start < region2_end) || - (region1_end > region2_start - && region1_end < region2_end)) { + /* Check if regions are not overlapping. */ + if (!((region2_end <= region1_start) || + (region1_end <= region2_start))) { WARN("Overlapping mem regions 0x%lx-0x%lx & 0x%lx-0x%lx\n", region1_start, region1_end, region2_start, region2_end); -- 2.39.5