• Eric Dumazet's avatar
    netlink: use kfree_rcu() in netlink_release() · 6d772ac5
    Eric Dumazet authored
    On some suspend/resume operations involving wimax device, we have
    noticed some intermittent memory corruptions in netlink code.
    
    Stéphane Marchesin tracked this corruption in netlink_update_listeners()
    and suggested a patch.
    
    It appears netlink_release() should use kfree_rcu() instead of kfree()
    for the listeners structure as it may be used by other cpus using RCU
    protection.
    
    netlink_release() must set to NULL the listeners pointer when
    it is about to be freed.
    
    Also have to protect netlink_update_listeners() and
    netlink_has_listeners() if listeners is NULL.
    
    Add a nl_deref_protected() lockdep helper to properly document which
    locks protects us.
    Reported-by: default avatarJonathan Kliegman <kliegs@google.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Stéphane Marchesin <marcheu@google.com>
    Cc: Sam Leffler <sleffler@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6d772ac5
af_netlink.c 49.8 KB