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/status.h>
|
||||||
#include <socks/object.h>
|
#include <socks/object.h>
|
||||||
#include <socks/device.h>
|
#include <socks/device.h>
|
||||||
|
#include <socks/printk.h>
|
||||||
#include <socks/bitmap.h>
|
#include <socks/bitmap.h>
|
||||||
#include <socks/libc/stdio.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);
|
device_lock_irqsave(dev, &flags);
|
||||||
driver_lock(owner);
|
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);
|
unsigned int minor = driver_alloc_minor(owner);
|
||||||
|
|
||||||
if (minor == DEV_MINOR_INVALID) {
|
if (minor == DEV_MINOR_INVALID) {
|
||||||
@@ -236,7 +244,6 @@ kern_status_t device_register(struct device *dev, struct driver *owner, struct d
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
driver_unlock(owner);
|
driver_unlock(owner);
|
||||||
device_unlock_irqrestore(dev, flags);
|
device_unlock_irqrestore(dev, flags);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user