dev: check that driver has a major number before registering device

This commit is contained in:
2023-06-03 21:06:33 +01:00
parent b7b0691b8f
commit 52c17be29d

View File

@@ -1,6 +1,7 @@
#include <socks/status.h>
#include <socks/object.h>
#include <socks/device.h>
#include <socks/printk.h>
#include <socks/bitmap.h>
#include <socks/libc/stdio.h>
@@ -203,6 +204,13 @@ kern_status_t device_register(struct device *dev, struct driver *owner, struct d
device_lock_irqsave(dev, &flags);
driver_lock(owner);
if (owner->drv_major == DEV_MAJOR_INVALID) {
driver_unlock(owner);
device_unlock_irqrestore(dev, flags);
/* TODO better error message for lack of resources? */
return KERN_INVALID_ARGUMENT;
}
unsigned int minor = driver_alloc_minor(owner);
if (minor == DEV_MINOR_INVALID) {
@@ -236,7 +244,6 @@ kern_status_t device_register(struct device *dev, struct driver *owner, struct d
break;
}
driver_unlock(owner);
device_unlock_irqrestore(dev, flags);