[SCTP]: IPv4 vs IPv6 addresses mess in sctp_inet[6]addr_event.
authorPavel Emelyanov <xemul@openvz.org>
Sun, 13 Apr 2008 01:40:38 +0000 (18:40 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 13 Apr 2008 01:40:38 +0000 (18:40 -0700)
commita40a7d15ba602b547f56b7b19e0282fe4fc3dee3
tree81eede5e751b3e5600547018285c739825a08d48
parentab38fb04c9f8928cfaf6f4966633d783419906a1
[SCTP]: IPv4 vs IPv6 addresses mess in sctp_inet[6]addr_event.

All IP addresses that are present in a system are duplicated on
struct sctp_sockaddr_entry. They are linked in the global list
called sctp_local_addr_list. And this struct unions IPv4 and IPv6
addresses.

So, there can be rare case, when a sockaddr_in.sin_addr coincides
with the corresponding part of the sockaddr_in6 and the notifier
for IPv4 will carry away an IPv6 entry.

The fix is to check the family before comparing the addresses.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/ipv6.c
net/sctp/protocol.c