glibc/support
Carlos O'Donell f8bf15febc Bug 20116: Fix use after free in pthread_create()
The commit documents the ownership rules around 'struct pthread' and
when a thread can read or write to the descriptor. With those ownership
rules in place it becomes obvious that pd->stopped_start should not be
touched in several of the paths during thread startup, particularly so
for detached threads. In the case of detached threads, between the time
the thread is created by the OS kernel and the creating thread checks
pd->stopped_start, the detached thread might have already exited and the
memory for pd unmapped. As a regression test we add a simple test which
exercises this exact case by quickly creating detached threads with
large enough stacks to ensure the thread stack cache is bypassed and the
stacks are unmapped. Before the fix the testcase segfaults, after the
fix it works correctly and completes without issue.

For a detailed discussion see:
https://www.sourceware.org/ml/libc-alpha/2017-01/msg00505.html
2017-01-28 19:21:44 -05:00
..
Makefile Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
README support: Introduce new subdirectory for test infrastructure 2016-12-09 08:18:27 +01:00
README-testing.c support: Introduce new subdirectory for test infrastructure 2016-12-09 08:18:27 +01:00
check.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check_addrinfo.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check_dns_packet.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check_hostent.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check_netent.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
check_nss.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
delayed_exit.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
format_nss.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ignore_stderr.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
namespace.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
oom_error.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
resolv_test.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
resolv_test.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
run_diff.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
set_fortify_handler.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_become_root.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_enter_network_namespace.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_address_family.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_addrinfo.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_dns_packet.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_herrno.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_hostent.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_format_netent.c support: struct netent portability fix for support_format_netent 2017-01-01 09:35:45 +01:00
support_record_failure.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_run_diff.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_test_main.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
support_test_verify_impl.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
temp_file-internal.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
temp_file.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
temp_file.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test-driver.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test-driver.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-support-namespace.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-support_record_failure-2.sh Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-support_record_failure.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
write_message.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xaccept.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xasprintf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xbind.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xcalloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xconnect.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xfclose.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xfopen.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xfork.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xgetsockname.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xlisten.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xmalloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xmemstream.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xmemstream.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xmmap.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xmunmap.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpoll.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_attr_destroy.c Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
xpthread_attr_init.c Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
xpthread_attr_setdetachstate.c Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
xpthread_attr_setstacksize.c Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
xpthread_barrier_destroy.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_barrier_init.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_barrier_wait.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_cancel.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_check_return.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_cond_wait.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_create.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_detach.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_join.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_mutex_consistent.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutex_destroy.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutex_init.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutex_lock.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_mutex_unlock.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_mutexattr_destroy.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutexattr_init.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutexattr_setprotocol.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutexattr_setpshared.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutexattr_setrobust.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_mutexattr_settype.c nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xpthread_once.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_sigmask.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_spin_lock.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xpthread_spin_unlock.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xrealloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xrecvfrom.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xsendto.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xsetsockopt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xsignal.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xsocket.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xsocket.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xstdio.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xstrdup.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xthread.h Bug 20116: Fix use after free in pthread_create() 2017-01-28 19:21:44 -05:00
xunistd.h nptl: Add tst-robust-fork 2017-01-27 06:53:20 +01:00
xwaitpid.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
xwrite.c support: Use %td for pointer difference in xwrite 2017-01-01 09:27:54 +01:00

README

This subdirectory contains infrastructure which is not put into
installed libraries, but may be linked into programs (installed or
not) and tests.

# Error-checking wrappers

These wrappers test for error return codes an terminate the process on
error.  They are declared in these header files:

* support.h
* xsignal.h
* xthread.h

In general, new wrappers should be added to support.h if possible.
However, support.h must remain fully compatible with C90 and therefore
cannot include headers which use identifers not reserved in C90.  If
the wrappers need additional types, additional headers such as
signal.h need to be introduced.

# Test framework

The test framework provides a main program for tests, including a
timeout for hanging tests.  See README-testing.c for a minimal
example, and test-driver.c for details how to use it.  The following
header files provide related declarations:

* check.h
* temp_file.h
* test-driver.h