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

Commit 3372f5a7 authored by Alexander Stein's avatar Alexander Stein Committed by Greg Ungerer
Browse files

m68k: Do not set global share for non-kernel shared pages



If the SG bit is set in MMUTR the page is accessible for all
userspace processes (ignoring the ASID). So a process might randomly
access a page from a different process which had a shared page
(from shared memory) in its context.

Signed-off-by: default avatarAlexander Stein <alexander.stein@systec-electronic.com>
Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
parent 57e00098
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -87,7 +87,7 @@ void __init paging_init(void)


int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word)
int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word)
{
{
	unsigned long flags, mmuar;
	unsigned long flags, mmuar, mmutr;
	struct mm_struct *mm;
	struct mm_struct *mm;
	pgd_t *pgd;
	pgd_t *pgd;
	pmd_t *pmd;
	pmd_t *pmd;
@@ -137,9 +137,10 @@ int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word)
	if (!pte_dirty(*pte) && !KMAPAREA(mmuar))
	if (!pte_dirty(*pte) && !KMAPAREA(mmuar))
		set_pte(pte, pte_wrprotect(*pte));
		set_pte(pte, pte_wrprotect(*pte));


	mmu_write(MMUTR, (mmuar & PAGE_MASK) | (asid << MMUTR_IDN) |
	mmutr = (mmuar & PAGE_MASK) | (asid << MMUTR_IDN) | MMUTR_V;
		(((int)(pte->pte) & (int)CF_PAGE_MMUTR_MASK)
	if ((mmuar < TASK_UNMAPPED_BASE) || (mmuar >= TASK_SIZE))
		>> CF_PAGE_MMUTR_SHIFT) | MMUTR_V);
		mmutr |= (pte->pte & CF_PAGE_MMUTR_MASK) >> CF_PAGE_MMUTR_SHIFT;
	mmu_write(MMUTR, mmutr);


	mmu_write(MMUDR, (pte_val(*pte) & PAGE_MASK) |
	mmu_write(MMUDR, (pte_val(*pte) & PAGE_MASK) |
		((pte->pte) & CF_PAGE_MMUDR_MASK) | MMUDR_SZ_8KB | MMUDR_X);
		((pte->pte) & CF_PAGE_MMUDR_MASK) | MMUDR_SZ_8KB | MMUDR_X);