From 0dd061269ed62e147329688b1eb421744988b106 Mon Sep 17 00:00:00 2001 From: vvsv Date: Wed, 3 Dec 2025 11:42:45 +0000 Subject: [PATCH] execve should return ENOEXEC for scripts without shebang --- kernel/src/process/program_loader/mod.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel/src/process/program_loader/mod.rs b/kernel/src/process/program_loader/mod.rs index 44a3680b2..614da1f01 100644 --- a/kernel/src/process/program_loader/mod.rs +++ b/kernel/src/process/program_loader/mod.rs @@ -22,7 +22,7 @@ use crate::{ /// the `argv` and the `envp` which is required for the program execution. pub struct ProgramToLoad { elf_inode: Arc, - file_first_page: Box<[u8; PAGE_SIZE]>, + elf_headers: ElfHeaders, argv: Vec, envp: Vec, } @@ -68,9 +68,11 @@ impl ProgramToLoad { ); } + let elf_headers = ElfHeaders::parse_elf(&*file_first_page)?; + Ok(Self { elf_inode: elf_inode.clone(), - file_first_page, + elf_headers, argv, envp, }) @@ -80,12 +82,11 @@ impl ProgramToLoad { /// /// Returns the information about the ELF loading process. pub fn load_to_vmar(self, vmar: &Vmar, fs_resolver: &FsResolver) -> Result { - let elf_headers = ElfHeaders::parse_elf(&*self.file_first_page)?; let elf_load_info = load_elf_to_vmar( vmar, &self.elf_inode, fs_resolver, - elf_headers, + self.elf_headers, self.argv, self.envp, )?;