firewire: add minor number range check to fw_device_init()
fw_device_init() didn't check whether the allocated minor number isn't too large. Fail if it goes overflows MINORBITS. Signed-off-by: Tejun Heo <tj@kernel.org> Suggested-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
69ee266b4c
commit
3bec60d511
@ -1020,6 +1020,10 @@ static void fw_device_init(struct work_struct *work)
|
|||||||
ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ?
|
ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ?
|
||||||
idr_get_new(&fw_device_idr, device, &minor) :
|
idr_get_new(&fw_device_idr, device, &minor) :
|
||||||
-ENOMEM;
|
-ENOMEM;
|
||||||
|
if (minor >= 1 << MINORBITS) {
|
||||||
|
idr_remove(&fw_device_idr, minor);
|
||||||
|
minor = -ENOSPC;
|
||||||
|
}
|
||||||
up_write(&fw_device_rwsem);
|
up_write(&fw_device_rwsem);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user