about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-03-07 16:24:04 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-03-08 17:37:09 +0100
commitff31d0b0233dffa7ec2e05bc1a4f849831fe63f3 (patch)
treeda244effaa33c1ff8cb5741f5d966245ece75be2 /src/wrapped
parent652e8318e66d3a7eea6257aca4b3fadf27c0522c (diff)
downloadbox64-ff31d0b0233dffa7ec2e05bc1a4f849831fe63f3.tar.gz
box64-ff31d0b0233dffa7ec2e05bc1a4f849831fe63f3.zip
Better handling of environ and envp in execve
Diffstat (limited to 'src/wrapped')
-rwxr-xr-xsrc/wrapped/wrappedlibc.c4
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 61429120..a3828b96 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -1697,6 +1697,10 @@ EXPORT int32_t my_execve(x64emu_t* emu, const char* path, char* const argv[], ch
     int self = isProcSelf(path, "exe");
     int x64 = FileIsX64ELF(path);
     int x86 = my_context->box86path?FileIsX86ELF(path):0;
+    // hack to update the environ var if needed
+    if(envp == my_context->envv && environ) {
+        envp = environ;
+    }
     printf_log(LOG_DEBUG, "execve(\"%s\", %p, %p) is x64=%d x86=%d\n", path, argv, envp, x64, x86);
     #if 1
     if (x64 || x86 || self) {
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index bdcca88d..4618c139 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -250,8 +250,8 @@ GOW(endttyent, iFv)
 GO(endusershell, vFv)
 GOW(endutent, vFv)
 GO(endutxent, vFv)
-DATA(environ, sizeof(void*))
-DATAB(__environ, sizeof(void*))
+DATAM(environ, sizeof(void*))
+DATAM(__environ, sizeof(void*))
 GO(envz_add, iFpppp)
 GO(envz_entry, pFpLp)
 GO(envz_get, pFpLp)