linux/net/tipc
Jon Paul Maloy 06bd2b1ed0 tipc: fix broadcast link synchronization problem
In commit 2d18ac4ba7 ("tipc: extend broadcast link initialization
criteria") we tried to fix a problem with the initial synchronization
of broadcast link acknowledge values. Unfortunately that solution is
not sufficient to solve the issue.

We have seen it happen that LINK_PROTOCOL/STATE packets with a valid
non-zero unicast acknowledge number may bypass BCAST_PROTOCOL
initialization, NAME_DISTRIBUTOR and other STATE packets with invalid
broadcast acknowledge numbers, leading to premature opening of the
broadcast link. When the bypassed packets finally arrive, they are
inadvertently accepted, and the already correctly initialized
acknowledge number in the broadcast receive link is overwritten by
the invalid (zero) value of the said packets. After this the broadcast
link goes stale.

We now fix this by marking the packets where we know the acknowledge
value is or may be invalid, and then ignoring the acks from those.

To this purpose, we claim an unused bit in the header to indicate that
the value is invalid. We set the bit to 1 in the initial BCAST_PROTOCOL
synchronization packet and all initial ("bulk") NAME_DISTRIBUTOR
packets, plus those LINK_PROTOCOL packets sent out before the broadcast
links are fully synchronized.

This minor protocol update is fully backwards compatible.

Reported-by: John Thompson <thompa.atl@gmail.com>
Tested-by: John Thompson <thompa.atl@gmail.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-10-29 17:21:09 -04:00
..
addr.c
addr.h
bcast.c tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
bcast.h tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
bearer.c
bearer.h
core.c
core.h
discover.c
discover.h
eth_media.c
ib_media.c
Kconfig
link.c tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
link.h
Makefile
monitor.c
monitor.h
msg.c
msg.h tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
name_distr.c tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
name_distr.h
name_table.c
name_table.h
net.c
net.h
netlink_compat.c
netlink.c
netlink.h
node.c tipc: fix broadcast link synchronization problem 2016-10-29 17:21:09 -04:00
node.h
server.c
server.h
socket.c
socket.h
subscr.c
subscr.h
sysctl.c
udp_media.c tipc: info leak in __tipc_nl_add_udp_addr() 2016-10-13 12:10:01 -04:00
udp_media.h