summaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@systemhalted.org>2018-01-24 20:35:22 -0800
committerCarlos O'Donell <carlos@systemhalted.org>2018-01-25 23:43:46 -0800
commit2ec0e7eade0ea1258acd5c6f5e5e9bfaeb5041a8 (patch)
tree9d069618e0132fa31ab0c39eda4c95f14d50a1b0 /nptl
parent47c4b4b060db0290022dcc37cab7b5ff4bdb5c32 (diff)
Revert Intel CET changes to __jmp_buf_tag (Bug 22743)
In commit cba595c350e52194e10c0006732e1991e3d0803b and commit f81ddabffd76ac9dd600b02adbf3e1dac4bb10ec, ABI compatibility with applications was broken by increasing the size of the on-stack allocated __pthread_unwind_buf_t beyond the oringal size. Applications only have the origianl space available for __pthread_unwind_register, and __pthread_unwind_next to use, any increase in the size of __pthread_unwind_buf_t causes these functions to write beyond the original structure into other on-stack variables leading to segmentation faults in common applications like vlc. The only workaround is to version those functions which operate on the old sized objects, but this must happen in glibc 2.28. Thank you to Andrew Senkevich, H.J. Lu, and Aurelien Jarno, for submitting reports and tracking the issue down. The commit reverts the above mentioned commits and testing on x86_64 shows that the ABI compatibility is restored. A tst-cleanup1 regression test linked with an older glibc now passes when run with the newly built glibc. Previously a tst-cleanup1 linked with an older glibc would segfault when run with an affected glibc build. Tested on x86_64 with no regressions. Signed-off-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'nptl')
-rw-r--r--nptl/Makefile3
-rw-r--r--nptl/descr.h3
2 files changed, 1 insertions, 5 deletions
diff --git a/nptl/Makefile b/nptl/Makefile
index 7940b3d26b..6fc2c8bb6a 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -22,8 +22,7 @@ subdir := nptl
include ../Makeconfig
-headers := pthread.h semaphore.h bits/semaphore.h \
- bits/types/__cancel_jmp_buf_tag.h
+headers := pthread.h semaphore.h bits/semaphore.h
extra-libs := libpthread
extra-libs-others := $(extra-libs)
diff --git a/nptl/descr.h b/nptl/descr.h
index 1cc6b09d1e..64ba29e1cb 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -65,9 +65,6 @@ struct pthread_unwind_buf
{
__jmp_buf jmp_buf;
int mask_was_saved;
-#ifdef NEED_SAVED_MASK_IN_CANCEL_JMP_BUF
- __sigset_t saved_mask;
-#endif
} cancel_jmp_buf[1];
union