]> Zhao Yanbai Git Server - minix.git/commitdiff
servers/rs: Add sanity check on executable size
authorLionel Sambuc <lionel@minix3.org>
Wed, 30 Jul 2014 14:10:03 +0000 (16:10 +0200)
committerLionel Sambuc <lionel@minix3.org>
Thu, 31 Jul 2014 14:00:32 +0000 (16:00 +0200)
RS used to do a stat, and check that the stat was successful, but it
didn't check that the executable was not actually empty.

This patch adds a check to detect file which are smaller than the minimum
ELF size possible.

Change-Id: I22b004084f17e7d395e2c1377add7bc8b51c3d5e

minix/lib/libexec/exec_elf.c
minix/servers/rs/manager.c

index 6600193fc86d858131326ce1e5406972245bd38e..f6d8d21cd125fc790a1fc2fe540c8c3599fb6dc8 100644 (file)
@@ -58,6 +58,8 @@ static int elf_ph_sane(Elf_Phdr *phdr)
 static int elf_unpack(char *exec_hdr,
        int hdr_len, Elf_Ehdr **hdr, Elf_Phdr **phdr)
 {
+  assert(hdr_len >= sizeof(Elf_Ehdr));
+
   *hdr = (Elf_Ehdr *) exec_hdr;
   if(!elf_sane(*hdr)) {
        return ENOEXEC;
index 0cadf95c059d716e9514b25d2fe230b0c2ed625c..9adf386c35877248508dafd6582f710070973eac 100644 (file)
@@ -7,6 +7,8 @@
 
 #include <paths.h>
 
+#include <sys/exec_elf.h>
+
 #include "inc.h"
 
 #include "kernel/proc.h"
@@ -1272,6 +1274,9 @@ struct rproc *rp;
   if (r != 0) 
       return -errno;
 
+  if (sb.st_size < sizeof(Elf_Ehdr))
+      return ENOEXEC;
+
   fd= open(e_name, O_RDONLY);
   if (fd == -1)
       return -errno;