ARM: 7735/2: Preserve the user r/w register TPIDRURW on context switch and fork
authorAndré Hentschel <nerv@dawncrow.de>
Tue, 18 Jun 2013 22:23:26 +0000 (23:23 +0100)
committerGrazvydas Ignotas <notasas@gmail.com>
Thu, 4 Jul 2013 22:54:12 +0000 (01:54 +0300)
commit15d5e883c4f1844e8c6ffc5cf8b1c7b2b74a6da9
tree58d104c3024ef893c1257a90967d6b3e520fcc09
parenta44a342213c06a4b78af20f1b52006e65a66b0d0
ARM: 7735/2: Preserve the user r/w register TPIDRURW on context switch and fork

Since commit 6a1c53124aa1 the user writeable TLS register was zeroed to
prevent it from being used as a covert channel between two tasks.

There are more and more applications coming to Windows RT,
Wine could support them, but mostly they expect to have
the thread environment block (TEB) in TPIDRURW.

This patch preserves that register per thread instead of clearing it.
Unlike the TPIDRURO, which is already switched, the TPIDRURW
can be updated from userspace so needs careful treatment in the case that we
modify TPIDRURW and call fork(). To avoid this we must always read
TPIDRURW in copy_thread.

Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonathan Austin <jonathan.austin@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Conflicts:

arch/arm/kernel/process.c
arch/arm/include/asm/thread_info.h
arch/arm/include/asm/tls.h
arch/arm/kernel/entry-armv.S
arch/arm/kernel/process.c
arch/arm/kernel/ptrace.c
arch/arm/kernel/traps.c