[PARISC] only make executable areas executable
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 14 Apr 2011 23:25:21 +0000 (18:25 -0500)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 15 Apr 2011 17:55:18 +0000 (12:55 -0500)
commitd7dd2ff11b7fcd425aca5a875983c862d19a67ae
tree6ad74d89d2355861b513eefb763ea6103a8d68e7
parente38f5b745075828ac51b12c8c95c85a7be4a3ec7
[PARISC] only make executable areas executable

Currently parisc has the whole kernel marked as RWX, meaning any
kernel page at all is eligible to be executed.  This can cause a
theoretical problem on systems with combined I/D TLB because the act
of referencing a page causes a TLB insertion with an executable bit.
This TLB entry may be used by the CPU as the basis for speculating the
page into the I-Cache.  If this speculated page is subsequently used
for a user process, there is the possibility we will get a stale
I-cache line picked up as the binary executes.

As a point of good practise, only mark actual kernel text pages as
executable.  The same has to be done for init_text pages, but they're
converted to data pages (and the I-Cache flushed) when the init memory
is released.

Signed-off-by: James Bottomley <James.Bottomley@suse.de>
arch/parisc/include/asm/pgtable.h
arch/parisc/kernel/entry.S
arch/parisc/kernel/head.S
arch/parisc/kernel/module.c
arch/parisc/kernel/vmlinux.lds.S
arch/parisc/mm/init.c