arm64: ptrace: Flush user-RW TLS reg to thread_struct before reading
authorDave Martin <Dave.Martin@arm.com>
Wed, 21 Jun 2017 15:00:44 +0000 (16:00 +0100)
committerWill Deacon <will.deacon@arm.com>
Thu, 22 Jun 2017 14:58:20 +0000 (15:58 +0100)
commit936eb65ca22ad856cb3a995e8cd742e982dc2dd0
treee779288573ebdabdf5248291fab6c436afd4a4f7
parente1d5a8fb73e6c65280c21ec188180345649ee650
arm64: ptrace: Flush user-RW TLS reg to thread_struct before reading

When reading current's user-writable TLS register (which occurs
when dumping core for native tasks), it is possible that userspace
has modified it since the time the task was last scheduled out.
The new TLS register value is not guaranteed to have been written
immediately back to thread_struct in this case.

As a result, a coredump can capture stale data for this register.
Reading the register for a stopped task via ptrace is unaffected.

For native tasks, this patch explicitly flushes the TPIDR_EL0
register back to thread_struct before dumping when operating on
current, thus ensuring that coredump contents are up to date.  For
compat tasks, the TLS register is not user-writable and so cannot
be out of sync, so no flush is required in compat_tls_get().

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/processor.h
arch/arm64/kernel/process.c
arch/arm64/kernel/ptrace.c