char:misc minor is overflowing
PATCH 1/1 char:misc minor is overflowing
Hi,
Is there any modification / improvement needed in this patch ?
------- Original Message -------
Sender : Shivnandan Kumar<[email protected]> Engineer/SRI-Noida-Advance Solutions - System 1 R&D Group/Samsung Electronics Date : Nov 20, 2015 15:35 (GMT+05:30)
Title : [PATCH] char:misc minor is overflowing
When a driver register as a misc driver and
it tries to allocate minor number dynamically.
Then there is a chance of minor number overflow.
The problem is that 64(DYNAMIC_MINORS) is not enough for dynamic minor number and if kernel defines 0-63 for dynamic minor number, it should be reserved. But,0-10 was used for other devices, for example 1 is reserved for PSMOUSE. I got the issue that misc_minors is 0x3FFFFFFFFFFFFFFF and so, value of variable 'i' in function misc_register becomes 62 and so misc_minors become 1.(Which was already reserved for PSMOUSE). This patch help to avoid the
above problem.
---
drivers/char/misc.c | 5 ++--- include/linux/miscdevice.h | 1 + 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/char/misc.c +0 -0
@@ -198,7 +198,7 @@ int misc_register(struct miscdevice * misc)
err = -EBUSY;
goto out;
}
- misc->minor = DYNAMIC_MINORS - i - 1;
+ misc->minor = DYNAMIC_MINORS - i - 1 + DYNAMIC_MINOR_START; set_bit(i, misc_minors);
} else {
struct miscdevice *c;
@@ -218,8 +218,7 @@ int misc_register(struct miscdevice * misc)
misc, misc->groups, "%s", misc->name);
if (IS_ERR(misc->this_device)) {
if (is_dynamic) {
- int i = DYNAMIC_MINORS - misc->minor - 1;
+ int i = DYNAMIC_MINORS - misc->minor - 1 + DYNAMIC_MINOR_START; if (i < DYNAMIC_MINORS && i >= 0)clear_bit(i, misc_minors);misc->minor = MISC_DYNAMIC_MINOR;
include/linux/miscdevice.h +0 -0
@@ -19,6 +19,7 @@
#define APOLLO_MOUSE_MINOR 7 /* unused */
#define PC110PAD_MINOR 9 /* unused */
/*#define ADB_MOUSE_MINOR 10 FIXME OBSOLETE */
+#define DYNAMIC_MINOR_START 11
#define WATCHDOG_MINOR 130 /* Watchdog timer */
#define TEMP_MINOR 131 /* Temperature Sensor */
#define RTC_MINOR 135
Signature · 9 lines
1.7.9.5
Nitin Gupta
Logix Cyber Park • Plot No. C 28-29, Tower D - Ground to 10th Floor, Tower C - 8th to 10th Floor, Sector 62 • Noida(U.P.) 201301 • INDIA
ÿôèº{.nÇ+‰·Ÿ®‰†+%ŠËÿ±éݶ¥Šwÿº{.nÇ+‰·¥Š{±þG«�éÿŠ{ayºÊ‡Ú™ë,j¢f£¢·hš�ï�êÿ‘êçz_è®(階ŠÝ¢j"�ú¶m§ÿÿ¾«þG«�éÿ¢¸?™¨èÚ&£ø§~�á¶iO•æ¬z·švØ^¶m§ÿÿÃÿ¶ìÿ¢¸?–I¥Quoted 9 lines · On Wed, 09 Dec 2015 12:51:33 +0000 (GMT) Nitin Gupta <[email protected]>…
Hi,
Is there any modification / improvement needed in this patch ?
------- Original Message -------
Sender : Shivnandan Kumar<[email protected]> Engineer/SRI-Noida-Advance Solutions - System 1 R&D Group/Samsung Electronics Date : Nov 20, 2015 15:35 (GMT+05:30)
Title : [PATCH] char:misc minor is overflowing
Quoted 4 lines
When a driver register as a misc driver and it tries to allocate minor number dynamically. Then there is a chance of minor number overflow. The problem is that 64(DYNAMIC_MINORS) is not enough
If you are allocating more than the odd minor number you shouldn't be using misc devices in the first place but should be using cdev_init/cdev_add/register_chrdev_region and friends.
So 64 really should never be "not enough". miscdevice is more historical than useful and really goes back to the days long before all the region allocators existed.
Alan