frr
frr copied to clipboard
pimd: fix crash when mixing ssm/any-source joins
Fixes: #15630
There is no reason to call igmp_anysource_forward_stop() inside a call to
igmp_get_source_by_addr(). The decision to start/stop forwarding is already handled correctly
by pim outside igmp_get_source_by_addr(). That call was left there from the days pim was
initially imported in.
The problem was happening because igmp_find_source_by_addr() would fail to find the group/source combo when
mixing (*, G) and (S, G), so a new entry is correctly created, but igmp_anysource_forward_stop(group) always stops (and eventually frees) (*, G) , but leaving a bad state because the new entry for (S, G) shouldn't have caused (*, G) to go away.
Tested the fix with multiple receivers on the same interface with several ssm and any source senders and receivers with various combination of start/stop orders and they all worked correctly.
@mergifyio backport stable/8.4 stable/8.5 stable/9.0 stable/9.1 stable/10.0
backport stable/8.4 stable/8.5 stable/9.0 stable/9.1 stable/10.0
✅ Backports have been created
- #16129 pimd: fix crash when mixing ssm/any-source joins (backport #16115) has been created for branch
stable/8.4 - #16130 pimd: fix crash when mixing ssm/any-source joins (backport #16115) has been created for branch
stable/8.5 - #16131 pimd: fix crash when mixing ssm/any-source joins (backport #16115) has been created for branch
stable/9.0 - #16132 pimd: fix crash when mixing ssm/any-source joins (backport #16115) has been created for branch
stable/9.1 - #16133 pimd: fix crash when mixing ssm/any-source joins (backport #16115) has been created for branch
stable/10.0
please put the summary above into the commit directly. It will be lost otherwise
please put the summary above into the commit directly. It will be lost otherwise
I knew you were going to say that! 😁 . Done!