Fix potential buffer overflow in makecontext trampoline
glibc's tst-makecontext2 testcase uncovered a bug in __cont_link_context. If the function misses to reserve shadow space for the calls to setcontext/cygwin_exit, both functions could overwrite memory beyond the stack configured in uc_stack. * exceptions.cc (__cont_link_context): x86_64: align stack and reserve shadow space for subsequent function calls, otherwise suffer potential buffer overflow. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
1e80973f28
commit
be8183701a
|
@ -1,3 +1,9 @@
|
||||||
|
2015-07-23 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* exceptions.cc (__cont_link_context): x86_64: align stack and reserve
|
||||||
|
shadow space for subsequent function calls, otherwise suffer potential
|
||||||
|
buffer overflow.
|
||||||
|
|
||||||
2015-07-23 Corinna Vinschen <corinna@vinschen.de>
|
2015-07-23 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* uinfo.cc (cygheap_user::ontherange): Ignore $HOME if it's not
|
* uinfo.cc (cygheap_user::ontherange): Ignore $HOME if it's not
|
||||||
|
|
|
@ -1929,9 +1929,14 @@ swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
|
||||||
is NULL, call exit. */
|
is NULL, call exit. */
|
||||||
__asm__ (" \n\
|
__asm__ (" \n\
|
||||||
.global __cont_link_context \n\
|
.global __cont_link_context \n\
|
||||||
|
.seh_proc __cont_link_context \n\
|
||||||
__cont_link_context: \n\
|
__cont_link_context: \n\
|
||||||
|
.seh_endprologue \n\
|
||||||
movq %rbx, %rsp \n\
|
movq %rbx, %rsp \n\
|
||||||
popq %rcx \n\
|
movq (%rsp), %rcx \n\
|
||||||
|
# align stack and subtract shadow space \n\
|
||||||
|
andq $~0xf, %rsp \n\
|
||||||
|
subq $0x20, %rsp \n\
|
||||||
testq %rcx, %rcx \n\
|
testq %rcx, %rcx \n\
|
||||||
je 1f \n\
|
je 1f \n\
|
||||||
call setcontext \n\
|
call setcontext \n\
|
||||||
|
@ -1939,6 +1944,7 @@ __cont_link_context: \n\
|
||||||
1: \n\
|
1: \n\
|
||||||
call cygwin_exit \n\
|
call cygwin_exit \n\
|
||||||
nop \n\
|
nop \n\
|
||||||
|
.seh_endproc \n\
|
||||||
");
|
");
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue