]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
chardev: add additional check for minor range overlap
authorChengguang Xu <cgxu519@gmx.com>
Fri, 15 Feb 2019 12:27:11 +0000 (20:27 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 31 May 2019 13:48:29 +0000 (06:48 -0700)
[ Upstream commit de36e16d1557a0b6eb328bc3516359a12ba5c25c ]

Current overlap checking cannot correctly handle
a case which is baseminor < existing baseminor &&
baseminor + minorct > existing baseminor + minorct.

Signed-off-by: Chengguang Xu <cgxu519@gmx.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/char_dev.c

index 44a240c4bb658149c2d2b5b527af35fbf1a95d49..a112a4745d8b37919b6344c8dd336c500d84075a 100644 (file)
@@ -134,6 +134,12 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor,
                        ret = -EBUSY;
                        goto out;
                }
+
+               if (new_min < old_min && new_max > old_max) {
+                       ret = -EBUSY;
+                       goto out;
+               }
+
        }
 
        cd->next = *cp;