소스 검색

fix crash in x32 sigsetjmp

the 64-bit push reads not only the 32-bit return address but also the
first 32 signal mask bits. if any were nonzero, the return address
obtained will be invalid.

at some point storage of the return address should probably be moved
to follow the saved mask so that there's plenty room and the same code
can be used on x32 and regular x86_64, but for now I want a fix that
does not risk breaking x86_64, and this simple re-zeroing works.
Rich Felker 10 년 전
부모
커밋
551c1d7a57
1개의 변경된 파일1개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      src/signal/x32/sigsetjmp.s

+ 1 - 0
src/signal/x32/sigsetjmp.s

@@ -14,6 +14,7 @@ __sigsetjmp:
 	call setjmp@PLT
 
 	pushq 64(%rbx)
+	movl $0, 4(%rsp)
 	mov %rbx,%rdi
 	mov %eax,%esi
 	mov 72+8(%rbx),%rbx