linux/arch/arc/kernel
Vineet Gupta b4dd80c333 ARC: clone syscall to setp r25 as thread pointer
commit c58a584f05 upstream.

Per ARC TLS ABI, r25 is designated TP (thread pointer register).
However so far kernel didn't do any special treatment, like setting up
usermode r25, even for CLONE_SETTLS. We instead relied on libc runtime
to do this, in say clone libc wrapper [1]. This was deliberate to keep
kernel ABI agnostic (userspace could potentially change TP, specially
for different ARC ISA say ARCompact vs. ARCv2 with different spare
registers etc)

However userspace setting up r25, after clone syscall opens a race, if
child is not scheduled and gets a signal instead. It starts off in
userspace not in clone but in a signal handler and anything TP sepcific
there such as pthread_self() fails which showed up with uClibc
testsuite nptl/tst-kill6 [2]

Fix this by having kernel populate r25 to TP value. So this locks in
ABI, but it was not going to change anyways, and fwiw is same for both
ARCompact (arc700 core) and ARCvs (HS3x cores)

[1] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libc/sysdeps/linux/arc/clone.S
[2] https://github.com/wbx-github/uclibc-ng-test/blob/master/test/nptl/tst-kill6.c

Fixes: ARC STAR 9001378481
Cc: stable@vger.kernel.org
Reported-by: Nikita Sobolev <sobolev@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-10-13 09:11:34 +02:00
..
.gitignore ARC: Add some .gitignore entries 2013-08-26 09:40:24 +05:30
arc_hostlink.c ARC: Hostlink Pseudo-Driver for Metaware Debugger 2013-02-15 23:16:10 +05:30
arcksyms.c
asm-offsets.c ARCv2: [vdk] dts files and defconfig for HS38 VDK 2015-06-25 06:00:21 +05:30
clk.c ARC: fix typo with clock speed 2013-05-07 13:43:54 +05:30
ctx_sw_asm.S ARC: remove SYNC from __switch_to() 2015-11-17 22:05:30 +05:30
ctx_sw.c ARC: remove SYNC from __switch_to() 2015-11-17 22:05:30 +05:30
devtree.c ARCv2: [axs103] Support ARC SDP FPGA platform for HS38x cores 2015-06-25 06:00:20 +05:30
disasm.c ARC: rename kconfig option for unaligned emulation 2014-10-13 14:46:15 +05:30
entry-arcv2.S ARCv2: SMP: Emulate IPI to self using software triggered interrupt 2016-03-03 15:07:28 -08:00
entry-compact.S ARC: [arcompact] Handle bus error from userspace as Interrupt not exception 2015-11-14 13:12:20 +05:30
entry.S ARC: Re-enable MMU upon Machine Check exception 2017-09-27 11:00:16 +02:00
fpu.c ARC: Process-creation/scheduling/idle-loop 2013-02-11 20:00:38 +05:30
head.S ARC: boot: Non Master cpus only need to call EARLY_CPU_SETUP once 2015-10-28 16:13:42 +05:30
intc-arcv2.c ARCv2: intc: Fix random perf irq disabling in SMP setup 2015-12-12 16:03:41 +05:30
intc-compact.c ARC: smp: irqchip: handle IPI as percpu irq like timer 2015-10-28 16:13:39 +05:30
irq.c ARC: Enable machine_desc->init_per_cpu for !CONFIG_SMP 2018-08-24 13:26:55 +02:00
kgdb.c ARC: kgdb: generic kgdb_arch_pc() suffices 2014-10-22 16:14:04 -06:00
kprobes.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-11-15 16:47:22 -08:00
Makefile ARCv2: SMP: Support ARConnect (MCIP) for Inter-Core-Interrupts et al 2015-06-22 14:06:56 +05:30
mcip.c ARCv2: SMP: Emulate IPI to self using software triggered interrupt 2016-03-03 15:07:28 -08:00
module.c ARC: Fix coding style issues 2013-04-09 12:21:14 +05:30
perf_event.c ARCv2: perf: Ensure perf intr gets enabled on all cores 2015-12-12 16:03:59 +05:30
process.c ARC: clone syscall to setp r25 as thread pointer 2018-10-13 09:11:34 +02:00
ptrace.c ARCv2: Support for ARCv2 ISA and HS38x cores 2015-06-22 14:06:55 +05:30
reset.c arc: export symbol for pm_power_off in reset.c 2013-11-06 10:41:44 +05:30
setup.c ARCv2: LLSC: software backoff is NOT needed starting HS2.1c 2016-07-27 09:47:31 -07:00
signal.c arc: don't leak bits of kernel stack into coredump 2016-10-28 03:01:32 -04:00
smp.c ARC: smp: Rename platform hook @init_cpu_smp -> @init_per_cpu 2015-12-17 12:56:56 +05:30
stacktrace.c arc: unwind: warn only once if DW2_UNWIND is disabled 2016-08-10 11:49:25 +02:00
sys.c ARC: ABIv3: fork/vfork wrappers not needed in "no-legacy-syscall" ABI 2013-03-11 19:01:10 +05:30
time.c ARC: timer: rtc: implement read loop in "C" vs. inline asm 2016-11-18 10:48:34 +01:00
traps.c ARC: rename unhandled exception handler 2015-04-13 15:14:57 +05:30
troubleshoot.c ARC: fix unused var wanring 2015-07-06 11:09:01 +05:30
unaligned.c ARC: [arcompact] brown paper bag bug in unaligned access delay slot fixup 2017-02-14 15:22:50 -08:00
unwind.c ARC: dw2 unwind: Catch Dwarf SNAFUs early 2015-12-21 14:01:49 +05:30
vmlinux.lds.S ARC: boot: Support Halt-on-reset and Run-on-reset SMP booting modes 2015-10-28 16:08:17 +05:30