]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Ensure FFA ranges are page aligned
authorMostafa Saleh <smostafa@google.com>
Thu, 2 Jul 2026 10:38:42 +0000 (10:38 +0000)
committerMarc Zyngier <maz@kernel.org>
Tue, 7 Jul 2026 10:25:50 +0000 (11:25 +0100)
Harden the check for the constituent memory region page alignment
to prevent over-sharing when the negotiated FFA_PAGE_SIZE size is
smaller than the system PAGE_SIZE.
At the moment we only check that the size of the range is page
aligned, and truncate the address to the page boundary which can
annotate more memory than needed as being used by the FF-A.

Fixes: 436090001776 ("KVM: arm64: Handle FFA_MEM_SHARE calls from the host")
Signed-off-by: Mostafa Saleh <smostafa@google.com>
Reviewed-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Sebastian Ene <sebastianene@google.com>
Link: https://patch.msgid.link/20260702103848.1647249-6-sebastianene@google.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/nvhe/ffa.c

index 2e7ab7e3319ded14cac6187e0842155b31a05fe2..9c96e72e522e54325371bdfde297a9554b249330 100644 (file)
@@ -352,7 +352,7 @@ static u32 __ffa_host_share_ranges(struct ffa_mem_region_addr_range *ranges,
                u64 sz = (u64)range->pg_cnt * FFA_PAGE_SIZE;
                u64 pfn = hyp_phys_to_pfn(range->address);
 
-               if (!PAGE_ALIGNED(sz))
+               if (!PAGE_ALIGNED(sz | range->address))
                        break;
 
                if (__pkvm_host_share_ffa(pfn, sz / PAGE_SIZE))
@@ -372,7 +372,7 @@ static u32 __ffa_host_unshare_ranges(struct ffa_mem_region_addr_range *ranges,
                u64 sz = (u64)range->pg_cnt * FFA_PAGE_SIZE;
                u64 pfn = hyp_phys_to_pfn(range->address);
 
-               if (!PAGE_ALIGNED(sz))
+               if (!PAGE_ALIGNED(sz | range->address))
                        break;
 
                if (__pkvm_host_unshare_ffa(pfn, sz / PAGE_SIZE))