[PATCH] babel: Fix missing modulo comparison of seqnos
Toke Høiland-Jørgensen
toke at toke.dk
Tue Jan 31 11:51:25 CET 2023
Juliusz Chroboczek <jch at irif.fr> writes:
>> Introduce a strict-inequality version of the modulo-comparison for this
>> purpose.
>
> Thanks.
>
> I'm a little worried about the code around line 1017:
>
> struct babel_source *s = babel_get_source(p, e, e->router_id);
> s->expires = current_time() + BABEL_GARBAGE_INTERVAL;
>
> if (gt_mod64k(msg.update.seqno, s->seqno) ||
> ((msg.update.seqno == s->seqno) && (msg.update.metric < s->metric)))
> {
> s->seqno = msg.update.seqno;
> s->metric = msg.update.metric;
> }
>
> If the source is just being created, then the function babel_get_source
> will initialise s->seqno to 0. If msg.update.seqno happens to be in the
> interval [0x8000,0xFFFF], then the conditional at line 1020 will fail to
> trigger, and s->seqno will not be updated until msg.updae.seqno catches up
> with 0.
>
> I think that babel_get_source should take an extra argument, the initial
> seqno in case the source does not exist, and it should be called with
> msg.update.seqno. This corresponds to RFC 8966 Section 3.5.3.
Ah, I see the problem. You're right, of course, sorry for not catching
your meaning the first time around. I'll send (another) patch :)
-Toke
More information about the Bird-users
mailing list