Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eeb03a6e authored by Madhusudanan Kandasamy's avatar Madhusudanan Kandasamy Committed by Benjamin Herrenschmidt
Browse files

powerpc: Fail remap_4k_pfn() if PFN doesn't fit inside PTE



remap_4k_pfn() silently truncates upper bits of input 4K PFN
if it cannot be contained in PTE. This leads invalid memory mapping and could
result in a system crash when the memory is accessed. This patch fails
remap_4k_pfn() and returns -EINVAL if the input 4K PFN cannot be contained in
PTE.

V3 : Added parentheses to protect 'pfn' and entire macro as suggested by Brian.
V2 : Rewritten to avoid helper function as suggested by Stephen Rothwell.

Signed-off-by: default avatarMadhusudanan Kandasamy <kmadhu@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent db97efff
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -75,7 +75,8 @@
	(((pte) & _PAGE_COMBO)? MMU_PAGE_4K: MMU_PAGE_64K)
	(((pte) & _PAGE_COMBO)? MMU_PAGE_4K: MMU_PAGE_64K)


#define remap_4k_pfn(vma, addr, pfn, prot)				\
#define remap_4k_pfn(vma, addr, pfn, prot)				\
	(WARN_ON(((pfn) >= (1UL << (64 - PTE_RPN_SHIFT)))) ? -EINVAL :	\
		remap_pfn_range((vma), (addr), (pfn), PAGE_SIZE,	\
		remap_pfn_range((vma), (addr), (pfn), PAGE_SIZE,	\
			__pgprot(pgprot_val((prot)) | _PAGE_4K_PFN))
			__pgprot(pgprot_val((prot)) | _PAGE_4K_PFN)))


#endif	/* __ASSEMBLY__ */
#endif	/* __ASSEMBLY__ */