From: Yasuhiro Ohara Date: Thu, 17 Dec 2009 05:41:17 +0000 (+0000) Subject: Bug in ospf6_lsa_compare() X-Git-Tag: frr-2.0-rc1~786 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=52cf4a5181d11481743f685c38c5711641c52e52;p=mirror%2Ffrr.git Bug in ospf6_lsa_compare() This fix is probably correct on 32bit systems, but i think it will not work on 64bit systems. sizeof(signed long) would be 8 and therefore the cast from u_int32_t will map all the values to non-negative part of long int. You would like to use int (like in ospfd) and change the type of seqnuma, seqnumb to that. The type int32_t would be even more proper, but sizeof(int) is 4 on relevant platforms. Signed-off: Ondrej Zajicek Acked-by: Feng Lu Acked-by: Yasuhiro Ohara (cherry picked from commit bdd8cd70a042473477f9144c9cedb8dde11ba2c1) --- diff --git a/ospf6d/ospf6_lsa.c b/ospf6d/ospf6_lsa.c index 2471f6c596..317e33ba7b 100644 --- a/ospf6d/ospf6_lsa.c +++ b/ospf6d/ospf6_lsa.c @@ -306,7 +306,7 @@ ospf6_lsa_premature_aging (struct ospf6_lsa *lsa) int ospf6_lsa_compare (struct ospf6_lsa *a, struct ospf6_lsa *b) { - int seqnuma, seqnumb; + int32_t seqnuma, seqnumb; u_int16_t cksuma, cksumb; u_int16_t agea, ageb; @@ -314,8 +314,8 @@ ospf6_lsa_compare (struct ospf6_lsa *a, struct ospf6_lsa *b) assert (b && b->header); assert (OSPF6_LSA_IS_SAME (a, b)); - seqnuma = (int) ntohl (a->header->seqnum); - seqnumb = (int) ntohl (b->header->seqnum); + seqnuma = (int32_t) ntohl (a->header->seqnum); + seqnumb = (int32_t) ntohl (b->header->seqnum); /* compare by sequence number */ if (seqnuma > seqnumb)