From 52c17be29d9c259809803d6a6f6ff1c71a6c2a79 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 3 Jun 2023 21:06:33 +0100 Subject: [PATCH] dev: check that driver has a major number before registering device --- dev/core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dev/core.c b/dev/core.c index bea49ad..d3abfd0 100644 --- a/dev/core.c +++ b/dev/core.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -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);