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

Commit f12d3d04 authored by Matthieu CASTET's avatar Matthieu CASTET Committed by H. Peter Anvin
Browse files

x86, nx: Don't force pages RW when setting NX bits



Xen want page table pages read only.

But the initial page table (from head_*.S) live in .data or .bss.

That was broken by 64edc8ed.  There is
absolutely no reason to force these pages RW after they have already
been marked RO.

Signed-off-by: default avatarMatthieu CASTET <castet.matthieu@free.fr>
Tested-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent afe8a887
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -256,7 +256,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
				   unsigned long pfn)
{
	pgprot_t forbidden = __pgprot(0);
	pgprot_t required = __pgprot(0);

	/*
	 * The BIOS area between 640k and 1Mb needs to be executable for
@@ -282,12 +281,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
	if (within(pfn, __pa((unsigned long)__start_rodata) >> PAGE_SHIFT,
		   __pa((unsigned long)__end_rodata) >> PAGE_SHIFT))
		pgprot_val(forbidden) |= _PAGE_RW;
	/*
	 * .data and .bss should always be writable.
	 */
	if (within(address, (unsigned long)_sdata, (unsigned long)_edata) ||
	    within(address, (unsigned long)__bss_start, (unsigned long)__bss_stop))
		pgprot_val(required) |= _PAGE_RW;

#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA)
	/*
@@ -327,7 +320,6 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
#endif

	prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden));
	prot = __pgprot(pgprot_val(prot) | pgprot_val(required));

	return prot;
}