lkml.org 
[lkml]   [2015]   [Oct]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.19.y-ckt 072/156] of/address: Don't loop forever in of_find_matching_node_by_address().
    Date
    3.19.8-ckt8 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: David Daney <david.daney@cavium.com>

    commit 3a496b00b6f90c41bd21a410871dfc97d4f3c7ab upstream.

    If the internal call to of_address_to_resource() fails, we end up
    looping forever in of_find_matching_node_by_address(). This can be
    caused by a defective device tree, or calling with an incorrect
    matches argument.

    Fix by calling of_find_matching_node() unconditionally at the end of
    the loop.

    Signed-off-by: David Daney <david.daney@cavium.com>
    Signed-off-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/of/address.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/of/address.c b/drivers/of/address.c
    index 8bfda6a..384574c 100644
    --- a/drivers/of/address.c
    +++ b/drivers/of/address.c
    @@ -845,10 +845,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from,
    struct resource res;

    while (dn) {
    - if (of_address_to_resource(dn, 0, &res))
    - continue;
    - if (res.start == base_address)
    + if (!of_address_to_resource(dn, 0, &res) &&
    + res.start == base_address)
    return dn;
    +
    dn = of_find_matching_node(dn, matches);
    }

    --
    1.9.1


    \
     
     \ /
      Last update: 2015-10-21 00:21    [W:4.161 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site