]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Make p_vaddr % p_align == p_offset % p_align for (some) TLS segments.
authorKonstantin Belousov <kib@FreeBSD.org>
Sat, 4 Apr 2020 22:37:50 +0000 (22:37 +0000)
committerKonstantin Belousov <kib@FreeBSD.org>
Sat, 4 Apr 2020 22:37:50 +0000 (22:37 +0000)
commit2f06c66ad524dea51c175ca24f59f4448ccd7254
tree31f5466547c7d0b3ebf1749dc51b81cbfdede244
parentff595bc3cd79c99921f4256aaf773b153441a432
Make p_vaddr % p_align == p_offset % p_align for (some) TLS segments.

See https://sourceware.org/bugzilla/show_bug.cgi?id=24606 for the test case.
See https://reviews.llvm.org/D64930 for the background and more discussion.

Also this fixes another bug in malloc_aligned() where total size of
the allocated memory might be not enough to fit the aligned requested
block after the initial pointer is incremented by the pointer size.

Reviewed by: bdragon
Tested by: antoine (exp-run PR 244866), bdragon, emaste
Sponsored by: The FreeBSD Foundation
MFC after: 2 weeks
Differential revision: https://reviews.freebsd.org/D21163
libexec/rtld-elf/map_object.c
libexec/rtld-elf/rtld.c
libexec/rtld-elf/rtld.h
libexec/rtld-elf/xmalloc.c