• Wen Yang's avatar
    coccinelle: semantic code search for missing put_device() · da9cfb87
    Wen Yang authored
    The of_find_device_by_node() takes a reference to the underlying device
    structure, we should release that reference.
    The implementation of this semantic code search is:
    In a function, for a local variable returned by calling
    of_find_device_by_node(),
    a, if it is released by a function such as
       put_device()/of_dev_put()/platform_device_put() after the last use,
       it is considered that there is no reference leak;
    b, if it is passed back to the caller via
       dev_get_drvdata()/platform_get_drvdata()/get_device(), etc., the
       reference will be released in other functions, and the current function
       also considers that there is no reference leak;
    c, for the rest of the situation, the current function should release the
       reference by calling put_device, this code search will report the
       corresponding error message.
    
    By using this semantic code search, we have found some object reference leaks,
    such as:
    commit 11907e9d ("ASoC: fsl-asoc-card: fix object reference leaks in
    fsl_asoc_card_probe")
    commit a12085d1 ("mtd: rawnand: atmel: fix possible object reference leak")
    commit 11493f26 ("mtd: rawnand: jz4780: fix possible object reference leak")
    
    There are still dozens of reference leaks in the current kernel code.
    
    Further, for the case of b, the object returned to other functions may also
    have a reference leak, we will continue to develop other cocci scripts to
    further check the reference leak.
    Signed-off-by: default avatarWen Yang <wen.yang99@zte.com.cn>
    Reviewed-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
    Reviewed-by: default avatarMarkus Elfring <Markus.Elfring@web.de>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    da9cfb87
put_device.cocci 1.27 KB