mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-09 19:30:29 +00:00
Update OpenExecutable to check for result from open with RDWR access
This commit is contained in:
parent
abac6f729c
commit
13ff8745c9
2 changed files with 14 additions and 2 deletions
|
@ -41,6 +41,7 @@ OpenExecutable:
|
||||||
pushq MAP_PRIVATE(%rip) # -0x30(%rbp)
|
pushq MAP_PRIVATE(%rip) # -0x30(%rbp)
|
||||||
pushq MAP_FIXED(%rip) # -0x38(%rbp)
|
pushq MAP_FIXED(%rip) # -0x38(%rbp)
|
||||||
pushq __NR_mprotect(%rip) # -0x40(%rbp)
|
pushq __NR_mprotect(%rip) # -0x40(%rbp)
|
||||||
|
pushq O_RDONLY(%rip) # -0x48(%rbp)
|
||||||
push %rbx # code buffer
|
push %rbx # code buffer
|
||||||
push %r12 # data buffer
|
push %r12 # data buffer
|
||||||
push %r14 # filename
|
push %r14 # filename
|
||||||
|
@ -122,6 +123,17 @@ OpenExecutable:
|
||||||
mov -0x20(%rbp),%esi # O_RDWR
|
mov -0x20(%rbp),%esi # O_RDWR
|
||||||
syscall
|
syscall
|
||||||
mov %eax,%r15d
|
mov %eax,%r15d
|
||||||
|
mov $-1,%eax # check if successful
|
||||||
|
cmp %eax,%r15d
|
||||||
|
jne 0f
|
||||||
|
|
||||||
|
// Open executable in read-only mode.
|
||||||
|
mov -0x08(%rbp),%eax # __NR_open
|
||||||
|
mov %r14,%rdi
|
||||||
|
mov -0x48(%rbp),%esi # O_RDONLY
|
||||||
|
syscall
|
||||||
|
mov %eax,%r15d
|
||||||
|
0:
|
||||||
|
|
||||||
// Map code segment.
|
// Map code segment.
|
||||||
mov -0x10(%rbp),%eax # __NR_mmap
|
mov -0x10(%rbp),%eax # __NR_mmap
|
||||||
|
|
|
@ -6854,8 +6854,8 @@ static void RestoreApe(void) {
|
||||||
if (endswith(zpath, ".com.dbg")) return;
|
if (endswith(zpath, ".com.dbg")) return;
|
||||||
if ((a = GetAssetZip("/.ape", 5)) && (p = LoadAsset(a, &n))) {
|
if ((a = GetAssetZip("/.ape", 5)) && (p = LoadAsset(a, &n))) {
|
||||||
close(zfd);
|
close(zfd);
|
||||||
zfd = OpenExecutable();
|
if ((zfd = OpenExecutable()) == -1 || write(zfd, p, n) == -1)
|
||||||
write(zfd, p, n);
|
WARNF("(srvr) can't restore .ape");
|
||||||
free(p);
|
free(p);
|
||||||
} else {
|
} else {
|
||||||
WARNF("(srvr) /.ape not found");
|
WARNF("(srvr) /.ape not found");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue