From bf961756b91764f617339cc435f4e5e32f6b5c6a Mon Sep 17 00:00:00 2001 From: Jianfeng Jiang Date: Fri, 14 Jul 2023 16:41:40 +0800 Subject: [PATCH] Set process executable path to interpreter path --- Cargo.lock | 2 +- .../jinux-std/src/process/posix_thread/posix_thread_ext.rs | 2 +- services/libs/jinux-std/src/process/program_loader/mod.rs | 4 ++-- services/libs/jinux-std/src/syscall/execve.rs | 5 +++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a288438f0..172c61fc3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1055,7 +1055,7 @@ dependencies = [ [[package]] name = "trapframe" version = "0.9.0" -source = "git+https://github.com/sdww0/trapframe-rs?rev=d4c5eba#d4c5ebab73d2295d69e2fcc66f51b9ae2883f8d9" +source = "git+https://github.com/sdww0/trapframe-rs?rev=e886763#e8867631def557939be5107f2be6c8d909d72431" dependencies = [ "log", "pod", diff --git a/services/libs/jinux-std/src/process/posix_thread/posix_thread_ext.rs b/services/libs/jinux-std/src/process/posix_thread/posix_thread_ext.rs index 6d95112e8..7e11ead7c 100644 --- a/services/libs/jinux-std/src/process/posix_thread/posix_thread_ext.rs +++ b/services/libs/jinux-std/src/process/posix_thread/posix_thread_ext.rs @@ -38,7 +38,7 @@ impl PosixThreadExt for Thread { let fs_path = FsPath::new(AT_FDCWD, executable_path)?; fs_resolver.lookup(&fs_path)? }; - let elf_load_info = + let (_, elf_load_info) = load_program_to_root_vmar(root_vmar, elf_file, argv, envp, fs_resolver, 1)?; let vm_space = root_vmar.vm_space().clone(); diff --git a/services/libs/jinux-std/src/process/program_loader/mod.rs b/services/libs/jinux-std/src/process/program_loader/mod.rs index 237da96a0..ec5796b19 100644 --- a/services/libs/jinux-std/src/process/program_loader/mod.rs +++ b/services/libs/jinux-std/src/process/program_loader/mod.rs @@ -24,7 +24,7 @@ pub fn load_program_to_root_vmar( envp: Vec, fs_resolver: &FsResolver, recursion_limit: usize, -) -> Result { +) -> Result<(String, ElfLoadInfo)> { let abs_path = elf_file.abs_path(); let vnode = elf_file.vnode(); let file_header = { @@ -54,5 +54,5 @@ pub fn load_program_to_root_vmar( } let elf_load_info = load_elf_to_root_vmar(root_vmar, &*file_header, elf_file, fs_resolver, argv, envp)?; - Ok(elf_load_info) + Ok((abs_path, elf_load_info)) } diff --git a/services/libs/jinux-std/src/syscall/execve.rs b/services/libs/jinux-std/src/syscall/execve.rs index a0e3c0446..7f0b1ec7c 100644 --- a/services/libs/jinux-std/src/syscall/execve.rs +++ b/services/libs/jinux-std/src/syscall/execve.rs @@ -114,10 +114,11 @@ fn do_execve( // load elf content to new vm space let fs_resolver = &*current.fs().read(); debug!("load program to root vmar"); - let elf_load_info = load_program_to_root_vmar(root_vmar, elf_file, argv, envp, fs_resolver, 1)?; + let (new_executable_path, elf_load_info) = + load_program_to_root_vmar(root_vmar, elf_file, argv, envp, fs_resolver, 1)?; debug!("load elf in execve succeeds"); // set executable path - *current.executable_path().write() = executable_path; + *current.executable_path().write() = new_executable_path; // set signal disposition to default current.sig_dispositions().lock().inherit(); // set cpu context to default