• C
    net: macvlan: fix memory leaks of macvlan_common_newlink · 23569b56
    Chuang Wang 提交于
    kmemleak reports memory leaks in macvlan_common_newlink, as follows:
    
     ip link add link eth0 name .. type macvlan mode source macaddr add
     <MAC-ADDR>
    
    kmemleak reports:
    
    unreferenced object 0xffff8880109bb140 (size 64):
      comm "ip", pid 284, jiffies 4294986150 (age 430.108s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 b8 aa 5a 12 80 88 ff ff  ..........Z.....
        80 1b fa 0d 80 88 ff ff 1e ff ac af c7 c1 6b 6b  ..............kk
      backtrace:
        [<ffffffff813e06a7>] kmem_cache_alloc_trace+0x1c7/0x300
        [<ffffffff81b66025>] macvlan_hash_add_source+0x45/0xc0
        [<ffffffff81b66a67>] macvlan_changelink_sources+0xd7/0x170
        [<ffffffff81b6775c>] macvlan_common_newlink+0x38c/0x5a0
        [<ffffffff81b6797e>] macvlan_newlink+0xe/0x20
        [<ffffffff81d97f8f>] __rtnl_newlink+0x7af/0xa50
        [<ffffffff81d98278>] rtnl_newlink+0x48/0x70
        ...
    
    In the scenario where the macvlan mode is configured as 'source',
    macvlan_changelink_sources() will be execured to reconfigure list of
    remote source mac addresses, at the same time, if register_netdevice()
    return an error, the resource generated by macvlan_changelink_sources()
    is not cleaned up.
    
    Using this patch, in the case of an error, it will execute
    macvlan_flush_sources() to ensure that the resource is cleaned up.
    
    Fixes: aa5fd0fb ("driver: macvlan: Destroy new macvlan port if macvlan_common_newlink failed.")
    Signed-off-by: NChuang Wang <nashuiliang@gmail.com>
    Link: https://lore.kernel.org/r/20221109090735.690500-1-nashuiliang@gmail.comSigned-off-by: NPaolo Abeni <pabeni@redhat.com>
    23569b56
macvlan.c 46.9 KB