linux/arch/alpha/kernel
Mikulas Patocka 0b2e4fd226 alpha: fix crash if pthread_create races with signal delivery
commit 21ffceda1c upstream.

On alpha, a process will crash if it attempts to start a thread and a
signal is delivered at the same time. The crash can be reproduced with
this program: https://cygwin.com/ml/cygwin/2014-11/msg00473.html

The reason for the crash is this:
* we call the clone syscall
* we go to the function copy_process
* copy process calls copy_thread_tls, it is a wrapper around copy_thread
* copy_thread sets the tls pointer: childti->pcb.unique = regs->r20
* copy_thread sets regs->r20 to zero
* we go back to copy_process
* copy process checks "if (signal_pending(current))" and returns
  -ERESTARTNOINTR
* the clone syscall is restarted, but this time, regs->r20 is zero, so
  the new thread is created with zero tls pointer
* the new thread crashes in start_thread when attempting to access tls

The comment in the code says that setting the register r20 is some
compatibility with OSF/1. But OSF/1 doesn't use the CLONE_SETTLS flag, so
we don't have to zero r20 if CLONE_SETTLS is set. This patch fixes the bug
by zeroing regs->r20 only if CLONE_SETTLS is not set.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-06-16 22:21:56 +01:00
..
.gitignore alpha: .gitignore vmlinux.lds 2009-01-15 16:39:40 -08:00
alpha_ksyms.c alpha: Eliminate compiler warning from memset macro 2013-11-16 16:33:09 -08:00
asm-offsets.c CRED: Separate task security context from task_struct 2008-11-14 10:39:16 +11:00
audit.c alpha: Enable system-call auditing support. 2014-01-31 09:21:55 -08:00
binfmt_loader.c get rid of pt_regs argument of ->load_binary() 2012-11-28 21:53:38 -05:00
console.c TTY:vt: convert remain take_over_console's users to do_take_over_console 2013-05-20 22:29:27 -07:00
core_apecs.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
core_cia.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
core_irongate.c alpha: Add export.h for THIS_MODULE/EXPORT_SYMBOL 2011-10-31 19:31:03 -04:00
core_lca.c Fix common misspellings 2011-03-31 11:26:23 -03:00
core_marvel.c arch/alpha/kernel: Add kmalloc NULL tests 2009-11-30 15:38:19 -05:00
core_mcpcia.c alpha: Remove set but unused variables. 2011-04-17 14:41:30 -07:00
core_polaris.c [PATCH] alpha pt_regs cleanups: machine_check() 2006-10-08 12:32:36 -07:00
core_t2.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
core_titan.c arch/alpha/kernel: Add kmalloc NULL tests 2009-11-30 15:38:19 -05:00
core_tsunami.c alpha: include module.h to fix modpost on Tsunami 2012-05-02 15:54:06 -04:00
core_wildfire.c [PATCH] alpha pt_regs cleanups: machine_check() 2006-10-08 12:32:36 -07:00
entry.S alpha: Enable system-call auditing support. 2014-01-31 09:21:55 -08:00
err_common.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
err_ev6.c alpha: Use static const char * const where possible 2010-09-18 23:06:17 -04:00
err_ev7.c alpha: titan and marvel build fixes 2009-05-02 15:36:10 -07:00
err_impl.h Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
err_marvel.c Fix common misspellings 2011-03-31 11:26:23 -03:00
err_titan.c alpha: Remove set but unused variables. 2011-04-17 14:41:30 -07:00
es1888.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gct.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head.S Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
io.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irq.c alpha: irq: run all handlers with interrupts disabled 2013-04-07 12:59:30 -07:00
irq_alpha.c alpha: Use qemu+cserve provided high-res clock and alarm. 2013-11-16 16:33:21 -08:00
irq_i8259.c alpha: Convert to new irq function names 2011-03-29 14:47:58 +02:00
irq_impl.h alpha: i8259, alcor, jensen wildfire: Convert irq_chip 2011-03-02 14:57:55 -05:00
irq_pyxis.c alpha: Convert to new irq function names 2011-03-29 14:47:58 +02:00
irq_srm.c alpha: Convert to new irq function names 2011-03-29 14:47:58 +02:00
machvec_impl.h alpha: Reorganize rtc handling 2013-11-16 16:33:16 -08:00
Makefile alpha: Enable system-call auditing support. 2014-01-31 09:21:55 -08:00
module.c modules: make arch's use default loader hooks 2011-07-24 22:06:04 +09:30
osf_sys.c osf_wait4(): fix infoleak 2017-09-15 18:29:47 +01:00
pc873xx.c alpha: Detect Super IO chip, no IDE on Avanti, enable EPP19 2010-06-15 14:19:08 -04:00
pc873xx.h alpha: Detect Super IO chip, no IDE on Avanti, enable EPP19 2010-06-15 14:19:08 -04:00
pci-noop.c Alpha: adapt for dma_map_ops changes 2012-03-28 16:36:36 +02:00
pci-sysfs.c alpha/PCI: Call iomem_is_exclusive() for IORESOURCE_MEM, but not IORESOURCE_IO 2016-08-22 22:37:51 +01:00
pci.c alpha/PCI: Use default pcibios_enable_device() 2014-03-19 15:00:14 -06:00
pci_impl.h alpha: fix reboot on Avanti platform 2018-06-16 22:21:56 +01:00
pci_iommu.c alpha/PCI: Use dev_is_pci() to identify PCI devices 2013-12-11 16:53:19 -07:00
perf_event.c alpha: perf: fix out-of-bounds array access triggered from raw event 2013-11-16 16:37:10 -08:00
process.c alpha: fix crash if pthread_create races with signal delivery 2018-06-16 22:21:56 +01:00
proto.h alpha: Use qemu+cserve provided high-res clock and alarm. 2013-11-16 16:33:21 -08:00
ptrace.c ptrace: Don't allow accessing an undumpable mm 2018-01-01 20:52:11 +00:00
rtc.c alpha: Reorganize rtc handling 2013-11-16 16:33:16 -08:00
setup.c alpha: Allow HZ to be configured 2013-11-16 16:33:13 -08:00
signal.c alpha: pass k_sigaction and siginfo_t using ksignal pointer 2013-02-14 09:21:16 -05:00
smc37c93x.c alpha: Remove set but unused variables. 2011-04-17 14:41:30 -07:00
smc37c669.c alpha: remove mysterious if zero-ed out includes 2012-07-30 17:25:11 -07:00
smp.c alpha: Switch to GENERIC_CLOCKEVENTS 2013-11-16 16:33:19 -08:00
srm_env.c srm_env: don't bother with pointer to srm_env_t 2013-04-09 14:13:33 -04:00
srmcons.c TTY: switch tty_schedule_flip 2013-01-15 22:43:15 -08:00
sys_alcor.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_cabriolet.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_dp264.c alpha: Don't if-out dp264_device_interrupt. 2013-07-19 13:54:26 -07:00
sys_eb64p.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_eiger.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_jensen.c alpha: Reorganize rtc handling 2013-11-16 16:33:16 -08:00
sys_marvel.c alpha: Reorganize rtc handling 2013-11-16 16:33:16 -08:00
sys_miata.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_mikasa.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_nautilus.c mm: enhance free_reserved_area() to support poisoning memory with zero 2013-07-03 16:07:32 -07:00
sys_noritake.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_rawhide.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_ruffian.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_rx164.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_sable.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_sio.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_sx164.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_takara.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
sys_titan.c alpha: irq: remove deprecated use of IRQF_DISABLED 2013-04-07 12:59:30 -07:00
sys_wildfire.c Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00
systbls.S alpha: Add kcmp and finit_module syscalls 2013-07-19 13:54:23 -07:00
time.c alpha: Use qemu+cserve provided high-res clock and alarm. 2013-11-16 16:33:21 -08:00
traps.c alpha: Primitive support for CPU power down. 2013-11-16 16:33:15 -08:00
vmlinux.lds.S Disintegrate asm/system.h for Alpha 2012-03-28 18:11:12 +01:00