Переглянути джерело

fix(elf): check before mmapping LOAD sections

greatbridf 1 рік тому
батько
коміт
71c939840d
1 змінених файлів з 14 додано та 10 видалено
  1. 14 10
      src/types/elf.cpp

+ 14 - 10
src/types/elf.cpp

@@ -106,16 +106,20 @@ int types::elf::elf32_load(types::elf::elf32_load_data* d)
         auto flen = align_up<12>(phents[i].vaddr + phents[i].filesz) - vaddr;
         auto fileoff = align_down<12>(phents[i].offset);
 
-        auto ret = mmap(
-            (char*)vaddr,
-            phents[i].filesz + (phents[i].vaddr & 0xfff),
-            d->exec,
-            fileoff,
-            1,
-            d->system);
-
-        if (ret != GB_OK)
-            goto error;
+        size_t mapped_size = phents[i].filesz + (phents[i].vaddr & 0xfff);
+        int ret;
+        if (mapped_size > 0) {
+            ret = mmap(
+                (char*)vaddr,
+                mapped_size,
+                d->exec,
+                fileoff,
+                1,
+                d->system);
+
+            if (ret != GB_OK)
+                goto error;
+        }
 
         if (vlen > flen) {
             ret = mmap(