• David L Stevens's avatar
    [IPV6] mcast: Fix multiple issues in MLDv2 reports. · 5ab4a6c8
    David L Stevens authored
    The below "jumbo" patch fixes the following problems in MLDv2.
    
    1) Add necessary "ntohs" to recent "pskb_may_pull" check [breaks
            all nonzero source queries on little-endian (!)]
    
    2) Add locking to source filter list [resend of prior patch]
    
    3) fix "mld_marksources()" to
            a) send nothing when all queried sources are excluded
            b) send full exclude report when source queried sources are
                    not excluded
            c) don't schedule a timer when there's nothing to report
    
    NOTE: RFC 3810 specifies the source list should be saved and each
      source reported individually as an IS_IN. This is an obvious DOS
      path, requiring the host to store and then multicast as many sources
      as are queried (e.g., millions...). This alternative sends a full, 
      relevant report that's limited to number of sources present on the
      machine.
    
    4) fix "add_grec()" to send empty-source records when it should
            The original check doesn't account for a non-empty source
            list with all sources inactive; the new code keeps that
            short-circuit case, and also generates the group header
            with an empty list if needed.
    
    5) fix mca_crcount decrement to be after add_grec(), which needs
            its original value
    
    These issues (other than item #1 ;-) ) were all found by Yan Zheng,
    much thanks!
    Signed-off-by: default avatarDavid L Stevens <dlstevens@us.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5ab4a6c8
mcast.c 61.7 KB