diff options
author | David L Stevens <dlstevens@us.ibm.com> | 2005-12-27 14:03:00 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-12-27 14:03:00 -0800 |
commit | 5ab4a6c81eb3dbe32361791d1535f9153f79b0ed (patch) | |
tree | c89504389bf1a3452a499db9ea19acea76941616 /net/ipv6/sit.c | |
parent | 1b93ae64cabe5e28dd5a1f35f96f938ca4f6ae20 (diff) | |
download | blackbird-op-linux-5ab4a6c81eb3dbe32361791d1535f9153f79b0ed.tar.gz blackbird-op-linux-5ab4a6c81eb3dbe32361791d1535f9153f79b0ed.zip |
[IPV6] mcast: Fix multiple issues in MLDv2 reports.
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: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/sit.c')
0 files changed, 0 insertions, 0 deletions