blob: 7b624498a055336a6ca1375047b8ac667efd84a7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <machine/asm.h>
#include <asm/unistd.h>
/* Get rid of the stack modifications (popl/ret) after vfork() success.
* vfork is VERY sneaky. One has to be very careful about what can be done
* between a successful vfork and a a subsequent execve()
*/
ENTRY(vfork)
/* grab the return address */
popl %ecx
movl $__NR_vfork, %eax
int $0x80
cmpl $-129, %eax
jb 1f
negl %eax
pushl %eax
call __set_errno
orl $-1, %eax
1:
jmp *%ecx
END(vfork)
|