openwrt/target/linux
Kevin Darbyshire-Bryant 8f4841462c kernel: MIPS: math-emu Write-protect delay slot emulation pages
Backport https://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git/commit/?id=adcc81f148d733b7e8e641300c5590a2cdc13bf3

"Mapping the delay slot emulation page as both writeable & executable
presents a security risk, in that if an exploit can write to & jump into
the page then it can be used as an easy way to execute arbitrary code.

Prevent this by mapping the page read-only for userland, and using
access_process_vm() with the FOLL_FORCE flag to write to it from
mips_dsemul().

This will likely be less efficient due to copy_to_user_page() performing
cache maintenance on a whole page, rather than a single line as in the
previous use of flush_cache_sigtramp(). However this delay slot
emulation code ought not to be running in any performance critical paths
anyway so this isn't really a problem, and we can probably do better in
copy_to_user_page() anyway in future.

A major advantage of this approach is that the fix is small & simple to
backport to stable kernels.

Reported-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Fixes: 432c6bacbd0c ("MIPS: Use per-mm page to execute branch delay slot instructions")"

Without patch:

cat /proc/self/maps
00400000-0047a000 r-xp 00000000 1f:03 1823       /bin/busybox
00489000-0048a000 r-xp 00079000 1f:03 1823       /bin/busybox
0048a000-0048b000 rwxp 0007a000 1f:03 1823       /bin/busybox
77ec8000-77eed000 r-xp 00000000 1f:03 2296       /lib/libgcc_s.so.1
77eed000-77eee000 rwxp 00015000 1f:03 2296       /lib/libgcc_s.so.1
77eee000-77f81000 r-xp 00000000 1f:03 2470       /lib/libc.so
77f90000-77f92000 rwxp 00092000 1f:03 2470       /lib/libc.so
77f92000-77f94000 rwxp 00000000 00:00 0
7f946000-7f967000 rw-p 00000000 00:00 0          [stack]
7fefb000-7fefc000 rwxp 00000000 00:00 0
7ffac000-7ffad000 r--p 00000000 00:00 0          [vvar]
7ffad000-7ffae000 r-xp 00000000 00:00 0          [vdso]

Patch applied:

cat /proc/self/maps
00400000-0047a000 r-xp 00000000 1f:03 1825       /bin/busybox
00489000-0048a000 r-xp 00079000 1f:03 1825       /bin/busybox
0048a000-0048b000 rwxp 0007a000 1f:03 1825       /bin/busybox
77ed0000-77ef5000 r-xp 00000000 1f:03 2298       /lib/libgcc_s.so.1
77ef5000-77ef6000 rwxp 00015000 1f:03 2298       /lib/libgcc_s.so.1
77ef6000-77f89000 r-xp 00000000 1f:03 2474       /lib/libc.so
77f98000-77f9a000 rwxp 00092000 1f:03 2474       /lib/libc.so
77f9a000-77f9c000 rwxp 00000000 00:00 0
7fbed000-7fc0e000 rw-p 00000000 00:00 0          [stack]
7fefb000-7fefc000 r-xp 00000000 00:00 0
7fff6000-7fff7000 r--p 00000000 00:00 0          [vvar]
7fff7000-7fff8000 r-xp 00000000 00:00 0          [vdso]

Note lack of write permission to 7fefb000-7fefc000

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
2018-12-24 21:52:08 +00:00
..
adm5120 kernel: Replace ledtrig-netdev with upstream backport 2018-12-15 12:50:06 +01:00
adm8668 treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
apm821xx apm821xx: switch MX60(W)'s recovery images to multi-image method 2018-12-22 15:08:24 +01:00
ar7 treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
ar71xx ar71xx: Fix PowerCloud CR5000 5GHz wifi mac 2018-12-20 18:28:59 +01:00
arc770 treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
archs38 treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
armvirt kernel: bump 4.14 to 4.14.77 2018-10-19 10:01:57 +02:00
at91 treewide: dts: Remove default-state=off property from all gpio LED nodes 2018-12-17 08:16:28 +01:00
ath25 kernel: bump 4.14 to 4.14.79 2018-11-05 16:00:00 +01:00
ath79 ath79: fix pinmux reg size for QCA955x 2018-12-24 19:18:07 +01:00
au1000 treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
bcm53xx bcm53xx: include WiFi firmware for devices with 4366C0 2018-12-17 12:51:06 +01:00
brcm47xx kernel: bump 4.14 to 4.14.81 2018-11-14 16:27:43 +01:00
brcm63xx build: move xor-image into image-commands 2018-12-24 19:18:07 +01:00
brcm2708 kernel: bump 4.14 to 4.14.90 2018-12-24 15:06:33 +00:00
cns3xxx kernel: bump 4.14 to 4.14.90 2018-12-24 15:06:33 +00:00
gemini gemini: Activate USB support again 2018-12-16 14:59:59 +01:00
generic kernel: MIPS: math-emu Write-protect delay slot emulation pages 2018-12-24 21:52:08 +00:00
imx6 imx6: image: ventana: Add missing BOOT_SCRIPT variable 2018-11-25 19:23:03 +01:00
ipq40xx ipq40xx: NBG6617: add usb-ledtrig-usbport to DEVICE_PACKAGES 2018-12-22 15:08:24 +01:00
ipq806x ipq806x: drop kernel/ rootfs partition images for the ZyXEL NBG6817 2018-12-17 00:21:34 +01:00
ixp4xx treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
kirkwood treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
lantiq treewide: dts: Remove default-state=off property from all gpio LED nodes 2018-12-17 08:16:28 +01:00
layerscape kernel: bump 4.14 to 4.14.90 2018-12-24 15:06:33 +00:00
malta treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
mcs814x kernel: bump 3.18 to 3.18.119 2018-08-20 13:03:23 +02:00
mediatek kernel: bump 4.14 to 4.14.89 2018-12-18 14:24:57 +01:00
mpc85xx mpc85xx: workaround 4.14 cross compile issue 2018-10-20 16:24:29 +02:00
mvebu kernel: bump 4.14 to 4.14.81 2018-11-14 16:27:43 +01:00
mxs mxs: use generic sysinfo board detection 2018-11-28 23:37:29 +01:00
octeon octeon: Evaluate board names in alphabetical order 2018-12-06 08:42:22 +01:00
octeontx kernel: enable memory compaction 2018-10-09 14:29:55 +02:00
omap kernel: bump 4.14 to 4.14.77 2018-10-19 10:01:57 +02:00
omap24xx omap24xx: remove referece to not existing kmod-usb-musb-tusb6010 2018-01-15 13:13:34 +01:00
orion treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
oxnas kernel: bump 4.14 to 4.14.90 2018-12-24 15:06:33 +00:00
pistachio kernel: bump 4.14 to 4.14.79 2018-11-05 16:00:00 +01:00
ppc40x kernel: only optimized for size if small_flash 2018-07-12 18:15:32 +02:00
ppc44x kernel: only optimized for size if small_flash 2018-07-12 18:15:32 +02:00
ramips treewide: dts: Remove default-state=off property from all gpio LED nodes 2018-12-17 08:16:28 +01:00
rb532 kernel: bump 4.14 to 4.14.86 2018-12-10 11:48:44 +01:00
samsung kernel: bump 4.14 to 4.14.77 2018-10-19 10:01:57 +02:00
sunxi kernel: bump 4.14 to 4.14.77 2018-10-19 10:01:57 +02:00
uml treewide: use wpad-basic for not small flash targets 2018-10-16 15:07:41 +01:00
x86 x86: make sysupgrade.tgz reachable again 2018-12-03 07:38:20 +01:00
xburst kernel: bump 3.18 to 3.18.119 2018-08-20 13:03:23 +02:00
zynq kernel: bump 4.14 to 4.14.77 2018-10-19 10:01:57 +02:00
Makefile