elf: limit the number of argc/envc
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 31 May 2019 18:39:54 +0000 (14:39 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 31 May 2019 18:51:59 +0000 (14:51 -0400)
This is just a sanity check.  There are a few multiplications based on
these numbers, and this essentially checks for overflow too.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/syscall.c

index 81a2b90..e22171b 100644 (file)
@@ -589,6 +589,10 @@ static int unpack_argenv(struct argenv *argenv, size_t argenv_l,
        char *argbuf = (char*)(envp + envc);
        uintptr_t argbuf_offset = (uintptr_t)(argbuf - (char*)(argenv));
 
+       /* ARG_MAX is the max number of bytes, which is an upper bound on the
+        * number of args or envs. */
+       if (argc > ARG_MAX || envc > ARG_MAX)
+               return -1;
        if (((char*)argv - (char*)argenv) > argenv_l)
                return -1;
        if (((char*)argv + (argc * sizeof(char**)) - (char*)argenv) > argenv_l)