diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sys/include/os/ns.h | 5 | ||||
-rw-r--r-- | src/sys/include/sys/fbdev.h | 2 | ||||
-rw-r--r-- | src/sys/io/video/fbdev.c | 2 | ||||
-rw-r--r-- | src/sys/os/os_ns.c | 20 |
4 files changed, 23 insertions, 6 deletions
diff --git a/src/sys/include/os/ns.h b/src/sys/include/os/ns.h index 87f18bf..73de677 100644 --- a/src/sys/include/os/ns.h +++ b/src/sys/include/os/ns.h @@ -33,6 +33,11 @@ #include <sys/types.h> #include <os/nsvar.h> +#define NSMAX 8 /* Max number of namespaces */ + +/* Namespace lists */ +#define NS_IOTAP 0 /* I/O tap interface */ + typedef uint8_t ns_t; /* diff --git a/src/sys/include/sys/fbdev.h b/src/sys/include/sys/fbdev.h index b0f3fb1..2acddbf 100644 --- a/src/sys/include/sys/fbdev.h +++ b/src/sys/include/sys/fbdev.h @@ -35,7 +35,7 @@ #include <stdint.h> #endif /* !_KERNEL */ -#define FBDEV_NSO "system:video:attr" +#define FBDEV_NSO "video:attr" struct fb_info { uint32_t width; diff --git a/src/sys/io/video/fbdev.c b/src/sys/io/video/fbdev.c index 9ebad7a..ce8c073 100644 --- a/src/sys/io/video/fbdev.c +++ b/src/sys/io/video/fbdev.c @@ -126,7 +126,7 @@ fbdev_init(struct module *modp) } obj->data = &info; - return ns_obj_enter(0, obj, FBDEV_NSO); + return ns_obj_enter(NS_IOTAP, obj, FBDEV_NSO); } static struct mac_ops ops = { diff --git a/src/sys/os/os_ns.c b/src/sys/os/os_ns.c index e449eb5..5259acc 100644 --- a/src/sys/os/os_ns.c +++ b/src/sys/os/os_ns.c @@ -55,7 +55,7 @@ struct ns_hashmap { }; /* Global namespace */ -static struct ns_hashmap namespace; +static struct ns_hashmap namespace[NSMAX]; /* * Fowler–Noll–Vo hash function @@ -131,12 +131,17 @@ ns_obj_enter(ns_t ns, void *obj, const char *name) return -EINVAL; } + /* Don't overflow */ + if (ns >= NSMAX) { + return -EINVAL; + } + /* Get the index */ hash = fnv1_hash(name); key = hash % NS_HM_ENTRIES; /* Find a free slot */ - hm = &namespace; + hm = &namespace[ns]; while (hm != NULL) { entry = &hm->entries[key]; @@ -168,11 +173,16 @@ ns_obj_lookup(ns_t ns, const char *name, void *res_p) return -EINVAL; } + /* Don't overflow */ + if (ns >= NSMAX) { + return -EINVAL; + } + /* Get the index */ hash = fnv1_hash(name); key = hash % NS_HM_ENTRIES; - hm = &namespace; + hm = &namespace[ns]; while (hm != NULL) { entry = &hm->entries[key]; if (entry->name == NULL) { @@ -202,6 +212,8 @@ ns_obj_lookup(ns_t ns, const char *name, void *res_p) int ns_init(void) { - memset(&namespace, 0, sizeof(namespace)); + for (uint8_t i = 0; i < NSMAX; ++i) { + memset(&namespace[i], 0, sizeof(namespace[0])); + } return 0; } |