dev: check that driver has a major number before registering device
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user