• Hangbin Liu's avatar
    multicast: do not restore deleted record source filter mode to new one · 08d3ffcc
    Hangbin Liu authored
    There are two scenarios that we will restore deleted records. The first is
    when device down and up(or unmap/remap). In this scenario the new filter
    mode is same with previous one. Because we get it from in_dev->mc_list and
    we do not touch it during device down and up.
    
    The other scenario is when a new socket join a group which was just delete
    and not finish sending status reports. In this scenario, we should use the
    current filter mode instead of restore old one. Here are 4 cases in total.
    
    old_socket        new_socket       before_fix       after_fix
      IN(A)             IN(A)           ALLOW(A)         ALLOW(A)
      IN(A)             EX( )           TO_IN( )         TO_EX( )
      EX( )             IN(A)           TO_EX( )         ALLOW(A)
      EX( )             EX( )           TO_EX( )         TO_EX( )
    
    Fixes: 24803f38 (igmp: do not remove igmp souce list info when set link down)
    Fixes: 1666d49e (mld: do not remove mld souce list info when set link down)
    Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    08d3ffcc
mcast.c 71.6 KB