arena: catch bad spans containing '0'
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 14 Jun 2019 19:07:44 +0000 (15:07 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 11 Jul 2019 18:29:21 +0000 (14:29 -0400)
Currently arena's can't hand out the value '0'.  That's actually baked
in to the vmem interface.  NULL is returned on error, so you can't
differentiate between it and 0.  I'm OK with that for now.

The asserts will catch people who try to add a span starting at 0, which
is close enough to catch this problem.

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

index 859cd40..30b1edb 100644 (file)
@@ -191,6 +191,8 @@ struct arena *arena_create(char *name, void *base, size_t size, size_t quantum,
        /* See note in arena_add() */
        if (source && base)
                panic("Arena can't have both a source and an initial span");
+       if (!base && size)
+               panic("Arena can't have a base starting at 0");
        arena = kmalloc(sizeof(struct arena), flags);
        if (!arena)
                return 0;
@@ -673,6 +675,8 @@ void *arena_add(struct arena *arena, void *base, size_t size, int flags)
         * freeing. */
        if (arena->source)
                panic("Arenas with sources must not manually add resources.");
+       if (!base && size)
+               panic("Arena can't have a base starting at 0");
        return __arena_add(arena, base, size, flags);
 }