diff options
| author | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2024-05-30 12:46:47 -0500 |
|---|---|---|
| committer | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2024-05-30 23:20:03 -0500 |
| commit | a951960a15e8b6b5ed248abb0ecc9eb4e9a3427f (patch) | |
| tree | 079b20fdbce088d41a097a5c20cb407c61142216 /pimd/pim_igmpv3.c | |
| parent | fd8a2c400aa972f6a38db50a7a27cdb3714538e1 (diff) | |
pimd: fix crash when mixing ssm/any-source joins
There is no reason to call `igmp_anysource_forward_stop()` inside a call to
`igmp_get_source_by_addr()`; not only it is not expected for a "get" function
to perform such an action, but also 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 into the sources.
The problem/crash was happening because `igmp_find_source_by_addr()` would fail to
find the group/source combo when mixing `(*, G)` and `(S, G)`. When having an existing
flow `(*, G)`, and a new `(S, G)` igmp is received, a new entry is correctly created.
`igmp_anysource_forward_stop(group)` always stops and eventually frees `(*, G)`, even
when the new igmp is `(S, G)`, leaving a bad state. I.e, the new entry for `(S, G)`
causes `(*, G)` to be deleted.
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.
Fixes: #15630
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
Diffstat (limited to 'pimd/pim_igmpv3.c')
| -rw-r--r-- | pimd/pim_igmpv3.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index 18a9fb7c6c..2c5ad4d44b 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -457,8 +457,6 @@ struct gm_source *igmp_get_source_by_addr(struct gm_group *group, listnode_add(group->group_source_list, src); - /* Any source (*,G) is forwarded only if mode is EXCLUDE {empty} */ - igmp_anysource_forward_stop(group); return src; } |
