From 0fe69d4c485f65e3fcc842ed60c226e45bf83992 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <57174311+trungnt2910@users.noreply.github.com> Date: Tue, 5 Apr 2022 09:27:47 +0700 Subject: [PATCH 1/3] feat: Manage executable path in darlingserver --- src/external/darlingserver | 2 +- src/kernel/emulation/linux/misc/proc_info.c | 9 +-------- src/startup/mldr/mldr.c | 2 ++ 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/external/darlingserver b/src/external/darlingserver index 761a292f1..c5a32023f 160000 --- a/src/external/darlingserver +++ b/src/external/darlingserver @@ -1 +1 @@ -Subproject commit 761a292f115c7ea308f339ecdd978b4cb21df09b +Subproject commit c5a32023f35c9eaa517ec53a0b4edded77e8de30 diff --git a/src/kernel/emulation/linux/misc/proc_info.c b/src/kernel/emulation/linux/misc/proc_info.c index 14497fb55..ea41f7e9a 100644 --- a/src/kernel/emulation/linux/misc/proc_info.c +++ b/src/kernel/emulation/linux/misc/proc_info.c @@ -645,20 +645,13 @@ static bool parse_smaps_firstline( static long _proc_pidinfo_pathinfo(int32_t pid, void* buffer, int32_t bufsize) { - char path[64]; struct vchroot_unexpand_args args; - __simple_sprintf(path, "/proc/%d/exe", pid); - - memset(buffer, 0, bufsize); - int rv = sys_readlink(path, buffer, bufsize - 1); + int rv = dserver_rpc_get_executable_path(pid, args.path, sizeof(args.path)); if (rv < 0) return rv; - ((char*)buffer)[rv] = 0; - - strcpy(args.path, buffer); rv = vchroot_unexpand(&args); if (rv != 0) return rv; diff --git a/src/startup/mldr/mldr.c b/src/startup/mldr/mldr.c index a3cdc67dc..4cdbc57aa 100644 --- a/src/startup/mldr/mldr.c +++ b/src/startup/mldr/mldr.c @@ -188,6 +188,8 @@ int main(int argc, char** argv, char** envp) exit(1); } + dserver_rpc_set_executable_path(filename, strlen(filename)); + start_thread(&mldr_load_results); __builtin_unreachable(); From 4fdfb250112daf7f029e094ab2d0b8b577a604a8 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <57174311+trungnt2910@users.noreply.github.com> Date: Tue, 5 Apr 2022 12:54:57 +0700 Subject: [PATCH 2/3] chore: Address comments & follow some API changes --- src/external/darlingserver | 2 +- src/kernel/emulation/linux/misc/proc_info.c | 14 +++++++++++--- src/startup/mldr/mldr.c | 7 +++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/external/darlingserver b/src/external/darlingserver index c5a32023f..226610318 160000 --- a/src/external/darlingserver +++ b/src/external/darlingserver @@ -1 +1 @@ -Subproject commit c5a32023f35c9eaa517ec53a0b4edded77e8de30 +Subproject commit 226610318c4b38fdb4f50054a8ce40d858d3a8d6 diff --git a/src/kernel/emulation/linux/misc/proc_info.c b/src/kernel/emulation/linux/misc/proc_info.c index ea41f7e9a..a71769fdd 100644 --- a/src/kernel/emulation/linux/misc/proc_info.c +++ b/src/kernel/emulation/linux/misc/proc_info.c @@ -646,11 +646,19 @@ static bool parse_smaps_firstline( static long _proc_pidinfo_pathinfo(int32_t pid, void* buffer, int32_t bufsize) { struct vchroot_unexpand_args args; + uint64_t fullLength; - int rv = dserver_rpc_get_executable_path(pid, args.path, sizeof(args.path)); + int rv = dserver_rpc_get_executable_path(pid, args.path, sizeof(args.path), &fullLength); - if (rv < 0) - return rv; + if (rv < 0) + { + __simple_printf("dserver_rpc_get_executable_path failed internally: %d\n", rv); + __simple_abort(); + } + else if (rv > 0) + { + return -rv; + } rv = vchroot_unexpand(&args); if (rv != 0) diff --git a/src/startup/mldr/mldr.c b/src/startup/mldr/mldr.c index 4cdbc57aa..60dd99279 100644 --- a/src/startup/mldr/mldr.c +++ b/src/startup/mldr/mldr.c @@ -188,8 +188,11 @@ int main(int argc, char** argv, char** envp) exit(1); } - dserver_rpc_set_executable_path(filename, strlen(filename)); - + if (dserver_rpc_set_executable_path(filename, strlen(filename)) < 0) { + fprintf(stderr, "Failed to tell darlingserver about our executable path\n"); + exit(1); + } + start_thread(&mldr_load_results); __builtin_unreachable(); From 268a948639946dc63e4585bf6adcdc80def114d5 Mon Sep 17 00:00:00 2001 From: Trung Nguyen <57174311+trungnt2910@users.noreply.github.com> Date: Wed, 6 Apr 2022 00:00:21 +0700 Subject: [PATCH 3/3] chore: Update darlingserver --- src/external/darlingserver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/darlingserver b/src/external/darlingserver index 226610318..e17bdbb1e 160000 --- a/src/external/darlingserver +++ b/src/external/darlingserver @@ -1 +1 @@ -Subproject commit 226610318c4b38fdb4f50054a8ce40d858d3a8d6 +Subproject commit e17bdbb1e7daea31772fd3c8b1eecf329a54f886