]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Bug in ospf6_lsa_compare()
authorYasuhiro Ohara <yasu@jaist.ac.jp>
Thu, 17 Dec 2009 05:41:17 +0000 (05:41 +0000)
committerDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 26 May 2016 01:14:44 +0000 (01:14 +0000)
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 <santiago@crfreenet.org>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Yasuhiro Ohara <yasu@jaist.ac.jp>
(cherry picked from commit bdd8cd70a042473477f9144c9cedb8dde11ba2c1)

ospf6d/ospf6_lsa.c

index 2471f6c5962eafed9633462b2939c8b5562ae2bb..317e33ba7b91d7424fa8d22a692a1a5a0be1191a 100644 (file)
@@ -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)