diff options
author | Anton Kling <anton@kling.gg> | 2024-04-13 21:07:02 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-13 21:07:02 +0200 |
commit | 92f848244796881994c1f147633123c45da219b6 (patch) | |
tree | 4ad209b6ede26b8475b7f0c6afb2382336dbbac7 /kernel/elf.c | |
parent | 008b84bf5308d2f180905130653a656bfedccf8c (diff) |
Kernel: Don't hard fail if the kernel can't allocate memory.
Currently this is just a improvement of error handling but it should
also try to free up memory where it is possible.
Diffstat (limited to 'kernel/elf.c')
-rw-r--r-- | kernel/elf.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/elf.c b/kernel/elf.c index 3d03335..01f1e53 100644 --- a/kernel/elf.c +++ b/kernel/elf.c @@ -6,7 +6,6 @@ #include <typedefs.h> void *load_elf_file(const char *f, u32 *ds) { - // ELFHeader *header = kmalloc(sizeof(ELFHeader)); ELFHeader header; int fd = vfs_open(f, O_RDONLY, 0); if (fd < 0) { @@ -46,10 +45,10 @@ void *load_elf_file(const char *f, u32 *ds) { pages_to_allocate -= p_vaddr - (p_vaddr % 0x1000); pages_to_allocate /= 0x1000; - mmu_allocate_region((void *)p_vaddr, pages_to_allocate * 0x1000, - MMU_FLAG_RW, NULL); - - flush_tlb(); + if(!mmu_allocate_region((void *)p_vaddr, pages_to_allocate * 0x1000, + MMU_FLAG_RW, NULL)) { + return NULL; + } uintptr_t e = program_header.p_vaddr + program_header.p_memsz; if (e > end_of_code) { |