powerpc/mm: Replace _PAGE_USER with _PAGE_PRIVILEGED
_PAGE_PRIVILEGED means the page can be accessed only by the kernel. This is done to keep pte bits similar to PowerISA 3.0 Radix PTE format. User pages are now marked by clearing _PAGE_PRIVILEGED bit. Previously we allowed the kernel to have a privileged page in the lower address range (USER_REGION). With this patch such access is denied. We also prevent a kernel access to a non-privileged page in higher address range (ie, REGION_ID != 0). Both the above access scenarios should never happen. Cc: Arnd Bergmann <arnd@arndb.de> Cc: Jeremy Kerr <jk@ozlabs.org> Cc: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Acked-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
e7bfc462d3
commit
ac29c64089
@@ -280,8 +280,17 @@ void __iomem * ioremap_prot(phys_addr_t addr, unsigned long size,
|
||||
if (flags & _PAGE_WRITE)
|
||||
flags |= _PAGE_DIRTY;
|
||||
|
||||
/* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */
|
||||
flags &= ~(_PAGE_USER | _PAGE_EXEC);
|
||||
/* we don't want to let _PAGE_EXEC leak out */
|
||||
flags &= ~_PAGE_EXEC;
|
||||
/*
|
||||
* Force kernel mapping.
|
||||
*/
|
||||
#if defined(CONFIG_PPC_BOOK3S_64)
|
||||
flags |= _PAGE_PRIVILEGED;
|
||||
#else
|
||||
flags &= ~_PAGE_USER;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _PAGE_BAP_SR
|
||||
/* _PAGE_USER contains _PAGE_BAP_SR on BookE using the new PTE format
|
||||
@@ -664,7 +673,7 @@ void pmdp_huge_split_prepare(struct vm_area_struct *vma,
|
||||
* the translation is still valid, because we will withdraw
|
||||
* pgtable_t after this.
|
||||
*/
|
||||
pmd_hugepage_update(vma->vm_mm, address, pmdp, _PAGE_USER, 0);
|
||||
pmd_hugepage_update(vma->vm_mm, address, pmdp, 0, _PAGE_PRIVILEGED);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user