• Julia Lawall's avatar
    mtd: brcmnand: improve memory management · 081976bc
    Julia Lawall authored
    This patch addresses two related memory management issues in the probe
    function:
    
    1. for_each_available_child_of_node performs an of_node_get on each
    iteration, so a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    expression root,e;
    local idexpression child;
    @@
    
     for_each_available_child_of_node(root, child) {
       ... when != of_node_put(child)
           when != e = child
    (
       return child;
    |
    +  of_node_put(child);
    ?  return ...;
    )
       ...
     }
    // </smpl>
    
    2. The devm_kzalloc'd data is not used if brcmnand_init_cs fails.  Free it
    immediately, using devm_kfree in this case, instead of waiting for the
    remove function.
    Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
    081976bc
brcmnand.c 60.9 KB