lkml.org 
[lkml]   [2009]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 1/3] misc: clear allocation bit in minor bitmap when device register fails
Date
If there's a failure creating the device (because there's already one
with the same name, for example), the current implementation does not
clear the bit for the allocated minor and that number is lost for future
allocations.

Second, the test currently in misc_deregister is broken, since it does
not test for the 0 minor.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
---
drivers/char/misc.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index 07fa612..95d1282 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -219,6 +219,9 @@ int misc_register(struct miscdevice * misc)
misc->this_device = device_create(misc_class, misc->parent, dev,
misc, "%s", misc->name);
if (IS_ERR(misc->this_device)) {
+ int i = misc->minor;
+ if (i < DYNAMIC_MINORS && i >= 0)
+ misc_minors[i>>3] &= ~(1 << (i & 7));
err = PTR_ERR(misc->this_device);
goto out;
}
@@ -253,9 +256,8 @@ int misc_deregister(struct miscdevice *misc)
mutex_lock(&misc_mtx);
list_del(&misc->list);
device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
- if (i < DYNAMIC_MINORS && i>0) {
- misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
- }
+ if (i < DYNAMIC_MINORS && i >= 0)
+ misc_minors[i>>3] &= ~(1 << (i & 7));
mutex_unlock(&misc_mtx);
return 0;
}
--
1.6.3.3


\
 
 \ /
  Last update: 2009-11-10 01:33    [W:0.083 / U:1.096 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site