X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/b60166b327a9108b07e3069fa6568a451529ffd9..aa67abb537f22db097db632d98212fa951bfeef0:/lunaix-os/kernel/exe/exec.c diff --git a/lunaix-os/kernel/exe/exec.c b/lunaix-os/kernel/exe/exec.c index 9ab8ad7..813d5c3 100644 --- a/lunaix-os/kernel/exe/exec.c +++ b/lunaix-os/kernel/exe/exec.c @@ -120,7 +120,7 @@ exec_load(struct exec_container* container, struct v_file* executable) if (!argv_extra[1]) { // If loading a statically linked file, then heap remapping we can do, // otherwise delayed. - create_heap(vmspace(proc), PG_ALIGN(container->exe.end)); + create_heap(vmspace(proc), page_aligned(container->exe.end)); } if (container->vms_mnt == VMS_SELF) { @@ -137,6 +137,9 @@ exec_load(struct exec_container* container, struct v_file* executable) memcpy((void*)ustack, (const void*)envp, envp_len); ustack = copy_to_ustack(ustack, (ptr_t*)ustack); + } else { + ustack -= sizeof(ptr_t); + *((ptr_t*)ustack) = 0; } if (argv) { @@ -144,6 +147,9 @@ exec_load(struct exec_container* container, struct v_file* executable) ustack -= argv_len; memcpy((void*)ustack, (const void**)argv, argv_len); + } else { + ustack -= sizeof(ptr_t); + *((ptr_t*)ustack) = 0; } for (size_t i = 0; i < 2 && argv_extra[i]; i++) { @@ -195,6 +201,11 @@ exec_load_byname(struct exec_container* container, const char* filename) goto done; } + if (!check_itype_any(dnode->inode, F_FILE)) { + errno = EISDIR; + goto done; + } + errno = exec_load(container, file); // It shouldn't matter which pid we passed. As the only reader is