From: David Lamparter Date: Fri, 17 Mar 2023 12:34:46 +0000 (+0100) Subject: pimd: stop t_sg_expire in MLD NOINFO transition X-Git-Tag: base_9.0~293^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f4ac0a1c7c8ff737b38befcc3618323162e62c0a;p=matthieu%2Ffrr.git pimd: stop t_sg_expire in MLD NOINFO transition When hitting gm_sg_update from the S,G expiry timer, t_sg_expire will already be cancelled. But when arriving there from e.g. the MLD packet getting cleared out, it'll still be running. Clear out the timer if we arrive with `has_expired == true`. Fixes: #12441 Reported-by: Vijay Kumar Gupta Signed-off-by: David Lamparter --- diff --git a/pimd/pim6_mld.c b/pimd/pim6_mld.c index fcece56c6f..fa699cca5e 100644 --- a/pimd/pim6_mld.c +++ b/pimd/pim6_mld.c @@ -438,6 +438,13 @@ static void gm_sg_update(struct gm_sg *sg, bool has_expired) } if (desired == GM_SG_NOINFO) { + /* multiple paths can lead to the last state going away; + * t_sg_expire can still be running if we're arriving from + * another path. + */ + if (has_expired) + THREAD_OFF(sg->t_sg_expire); + assertf((!sg->t_sg_expire && !gm_packet_sg_subs_count(sg->subs_positive) && !gm_packet_sg_subs_count(sg->subs_negative)),