• Julia Lawall's avatar
    drivers/net/can/mscan/mpc5xxx_can.c: Add of_node_put to avoid memory leak · aed5029e
    Julia Lawall authored
    Add a call to of_node_put in the error handling code following a call to
    of_find_matching_node.
    
    This patch also moves the existing call to of_node_put after the call to
    iounmap in the error handling code, to make it possible to jump to
    of_node_put without doing iounmap.  These appear to be disjoint operations,
    so the ordering doesn't matter.
    
    This patch furthermore changes the -ENODEV result in the error handling
    code for of_find_matching_node to a return of 0, as found in the error
    handling code for of_iomap, because the return type of the function is
    unsigned.
    
    The semantic match that finds this problem is as follows:
    (http://coccinelle.lip6.fr/)
    
    // <smpl>
    @r exists@
    local idexpression x;
    expression E,E1,E2;
    statement S;
    @@
    
    *x =
    (of_find_node_by_path
    |of_find_node_by_name
    |of_find_node_by_phandle
    |of_get_parent
    |of_get_next_parent
    |of_get_next_child
    |of_find_compatible_node
    |of_match_node
    |of_find_node_by_type
    |of_find_node_with_property
    |of_find_matching_node
    |of_parse_phandle
    )(...);
    ...
    if (x == NULL) S
    <... when != x = E
    *if (...) {
      ... when != of_node_put(x)
          when != if (...) { ... of_node_put(x); ... }
    (
      return <+...x...+>;
    |
    *  return ...;
    )
    }
    ...>
    (
    E2 = x;
    |
    of_node_put(x);
    )
    // </smpl>
    Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
    Reviewed-by: default avatarWolfram Sang <w.sang@pengutronix.de>
    Acked-by: default avatarWolfgang Grandegger <wg@grandegger.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    aed5029e
mpc5xxx_can.c 11.3 KB