• Antoine Tenart's avatar
    net: fix a memleak when uncloning an skb dst and its metadata · 9eeabdf1
    Antoine Tenart authored
    When uncloning an skb dst and its associated metadata, a new
    dst+metadata is allocated and later replaces the old one in the skb.
    This is helpful to have a non-shared dst+metadata attached to a specific
    skb.
    
    The issue is the uncloned dst+metadata is initialized with a refcount of
    1, which is increased to 2 before attaching it to the skb. When
    tun_dst_unclone returns, the dst+metadata is only referenced from a
    single place (the skb) while its refcount is 2. Its refcount will never
    drop to 0 (when the skb is consumed), leading to a memory leak.
    
    Fix this by removing the call to dst_hold in tun_dst_unclone, as the
    dst+metadata refcount is already 1.
    
    Fixes: fc4099f1 ("openvswitch: Fix egress tunnel info.")
    Cc: Pravin B Shelar <pshelar@ovn.org>
    Reported-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Tested-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Signed-off-by: default avatarAntoine Tenart <atenart@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9eeabdf1
dst_metadata.h 5.39 KB