Changed user_mem_check(), user_mem_assert() to throw kernel warnings on len = 0
authorPaul Pearce <pearce@eecs.berkeley.edu>
Wed, 23 Sep 2009 00:54:33 +0000 (17:54 -0700)
committerPaul Pearce <pearce@eecs.berkeley.edu>
Wed, 23 Sep 2009 00:54:33 +0000 (17:54 -0700)
Previously calling one of these functions with a length of 0 would cause an
ivy assertion warning, but continue on. This wasn't desirable, so now an
explicit check is in place to throw a kernel warning and return failure
in the event of such a call. We've deemed such a call to be a bug.

kern/src/pmap.c

index 16bf038..ebd136a 100644 (file)
@@ -265,6 +265,11 @@ void tlb_invalidate(pde_t *pgdir, void *va)
  */
 void* user_mem_check(env_t *env, const void *DANGEROUS va, size_t len, int perm)
 {
+       if (len == 0) {
+               warn("Called user_mem_check with a len of 0. Don't do that. Returning NULL");
+               return NULL;
+       }
+       
        // TODO - will need to sort this out wrt page faulting / PTE_P
        // also could be issues with sleeping and waking up to find pages
        // are unmapped, though i think the lab ignores this since the 
@@ -365,6 +370,11 @@ user_mem_strlcpy(env_t *env, char *_dst, const char *DANGEROUS va,
 void *
 user_mem_assert(env_t *env, const void *DANGEROUS va, size_t len, int perm)
 {
+       if (len == 0) {
+               warn("Called user_mem_assert with a len of 0. Don't do that. Returning NULL");
+               return NULL;
+       }
+       
     void *COUNT(len) res = user_mem_check(env,va,len,perm | PTE_USER_RO);
        if (!res) {
                cprintf("[%08x] user_mem_check assertion failure for "