| From c976eb9cbc83d65550bfbe71d102cff50e7fc805 Mon Sep 17 00:00:00 2001 |
| From: Chengguang Xu <cgxu519@gmx.com> |
| Date: Fri, 15 Feb 2019 20:27:11 +0800 |
| Subject: chardev: add additional check for minor range overlap |
| |
| [ 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 | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/fs/char_dev.c b/fs/char_dev.c |
| index a279c58fe3606..8a63cfa290053 100644 |
| --- a/fs/char_dev.c |
| +++ b/fs/char_dev.c |
| @@ -159,6 +159,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; |
| -- |
| 2.20.1 |
| |