From 2f00636b80c713be718a7656ce82947fb8f3ecf1 Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 21 Jun 2012 22:36:03 +0200 Subject: fix stack setup check if name+arguments fits into one page before copying --- userprog/process.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/userprog/process.c b/userprog/process.c index bf1a706..741503b 100644 --- a/userprog/process.c +++ b/userprog/process.c @@ -614,11 +614,17 @@ setup_stack (uint32_t **esp, const char *args) stack_end = PHYS_BASE - PGSIZE; stack_end += 4 + 1; - /* copy arguments to stack */ + /* check if arguments fits into our stack */ argslen = strlen(args); + if (argslen > 0) + argslen += 1; /* add the trailing \0 */ + namelen = strlen(name) + 1; + if (*esp - argslen - namelen <= stack_end) + return false; + + /* copy arguments to stack */ if (argslen > 0) { - argslen += 1; /* add the trailing \0 */ *(char **) esp -= argslen; memcpy(*esp, args, argslen); } @@ -628,7 +634,7 @@ setup_stack (uint32_t **esp, const char *args) *(char **) esp -= namelen; memcpy(*esp, name, namelen); - /* align our currend address by word-size (thanks to thomas & edy) */ + /* align our current address by word-size */ *(char **) esp -= (sizeof(uint32_t) - (PHYS_BASE - *(void **) esp) % sizeof(uint32_t)); /* terminate argv[] array by NULL ptr */ -- cgit v1.2.3