diff options
author | Huang Shijie <shijie8@gmail.com> | 2010-10-28 00:34:52 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 03:03:18 +0200 |
commit | 5de1cb2d0f1c1e5475d2bedf65b76828f8cdde22 (patch) | |
tree | 2f3dbb20f08bfbbdd1f4da144f9c18fec9cce7aa /kernel/resource.c | |
parent | kfifo: fix kfifo_alloc() to return a signed int value (diff) | |
download | linux-5de1cb2d0f1c1e5475d2bedf65b76828f8cdde22.tar.xz linux-5de1cb2d0f1c1e5475d2bedf65b76828f8cdde22.zip |
kernel/resource.c: handle reinsertion of an already-inserted resource
If the same resource is inserted to the resource tree (maybe not on
purpose), a dead loop will be created. In this situation, The kernel does
not report any warning or error :(
The command below will show a endless print.
#cat /proc/iomem
[akpm@linux-foundation.org: add WARN_ON()]
Signed-off-by: Huang Shijie <shijie8@gmail.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/resource.c')
-rw-r--r-- | kernel/resource.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index 7b36976e5dea..9c9841cb6902 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -453,6 +453,8 @@ static struct resource * __insert_resource(struct resource *parent, struct resou if (first == parent) return first; + if (WARN_ON(first == new)) /* duplicated insertion */ + return first; if ((first->start > new->start) || (first->end < new->end)) break; |