diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2014-05-28 13:39:02 -0400 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2014-06-04 05:46:01 -0400 |
commit | 43cb43678705e39b175b325f17938295996aefc7 (patch) | |
tree | 0c238470709c70f60714245816e6437efb0cdef1 /drivers/of | |
parent | 64c5c759084e153272eb05f4103de3e0adf5a88a (diff) |
of: handle NULL node in next_child iterators
Add an early check for the node argument in __of_get_next_child and
of_get_next_available_child() to avoid dereferencing a NULL node pointer
a few lines after.
CC: Daniel Mack <zonque@gmail.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Grant Likely <grant.likely@linaro.org>
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/base.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index e67b308819c9..567e6e1b7921 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
@@ -700,6 +700,9 @@ static struct device_node *__of_get_next_child(const struct device_node *node, | |||
700 | { | 700 | { |
701 | struct device_node *next; | 701 | struct device_node *next; |
702 | 702 | ||
703 | if (!node) | ||
704 | return NULL; | ||
705 | |||
703 | next = prev ? prev->sibling : node->child; | 706 | next = prev ? prev->sibling : node->child; |
704 | for (; next; next = next->sibling) | 707 | for (; next; next = next->sibling) |
705 | if (of_node_get(next)) | 708 | if (of_node_get(next)) |
@@ -746,6 +749,9 @@ struct device_node *of_get_next_available_child(const struct device_node *node, | |||
746 | struct device_node *next; | 749 | struct device_node *next; |
747 | unsigned long flags; | 750 | unsigned long flags; |
748 | 751 | ||
752 | if (!node) | ||
753 | return NULL; | ||
754 | |||
749 | raw_spin_lock_irqsave(&devtree_lock, flags); | 755 | raw_spin_lock_irqsave(&devtree_lock, flags); |
750 | next = prev ? prev->sibling : node->child; | 756 | next = prev ? prev->sibling : node->child; |
751 | for (; next; next = next->sibling) { | 757 | for (; next; next = next->sibling) { |