]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix more regressions in attr flag checks
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 18 Oct 2011 10:20:04 +0000 (14:20 +0400)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 19 Oct 2011 13:28:01 +0000 (17:28 +0400)
Commit 05a4936b713b9882171d0f7fb20b8439df23939e fixed some of the
attributes involved, but not all. This commit should do it.

* bgp_attr.c
  * bgp_attr_originator_id()
  * bgp_attr_cluster_list()
  * bgp_mp_reach_parse()
  * bgp_mp_unreach_parse()

bgpd/bgp_attr.c

index a60bb8e5e24511cc656d5110c34ff4cafe8bed01..d7eeec1f245e22d369ba7f143173b9dc21e7f8dc 100644 (file)
@@ -1360,7 +1360,7 @@ bgp_attr_originator_id (struct peer *peer, bgp_size_t length,
 
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
   /* Flag checks. */
-  if (flag != BGP_ATTR_FLAG_OPTIONAL)
+  if ((flag & ~BGP_ATTR_FLAG_EXTLEN) != BGP_ATTR_FLAG_OPTIONAL)
   {
     if (! CHECK_FLAG (flag, BGP_ATTR_FLAG_OPTIONAL))
       zlog (peer->log, LOG_ERR, "ORIGINATOR_ID attribute must be flagged as \"optional\" (%u)", flag);
@@ -1399,7 +1399,7 @@ bgp_attr_cluster_list (struct peer *peer, bgp_size_t length,
 
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
   /* Flag checks. */
-  if (flag != BGP_ATTR_FLAG_OPTIONAL)
+  if ((flag & ~BGP_ATTR_FLAG_EXTLEN) != BGP_ATTR_FLAG_OPTIONAL)
   {
     if (! CHECK_FLAG (flag, BGP_ATTR_FLAG_OPTIONAL))
       zlog (peer->log, LOG_ERR, "CLUSTER_LIST attribute must be flagged as \"optional\" (%u)", flag);
@@ -1448,7 +1448,7 @@ bgp_mp_reach_parse (struct peer *peer, const bgp_size_t length,
 
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
   /* Flag checks. */
-  if (flag != BGP_ATTR_FLAG_OPTIONAL)
+  if ((flag & ~BGP_ATTR_FLAG_EXTLEN) != BGP_ATTR_FLAG_OPTIONAL)
   {
     if (! CHECK_FLAG (flag, BGP_ATTR_FLAG_OPTIONAL))
       zlog (peer->log, LOG_ERR, "MP_REACH_NLRI attribute must be flagged as \"optional\" (%u)", flag);
@@ -1596,7 +1596,7 @@ bgp_mp_unreach_parse (struct peer *peer, const bgp_size_t length,
 
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
   /* Flag checks. */
-  if (flag != BGP_ATTR_FLAG_OPTIONAL)
+  if ((flag & ~BGP_ATTR_FLAG_EXTLEN) != BGP_ATTR_FLAG_OPTIONAL)
   {
     if (! CHECK_FLAG (flag, BGP_ATTR_FLAG_OPTIONAL))
       zlog (peer->log, LOG_ERR, "MP_UNREACH_NLRI attribute must be flagged as \"optional\" (%u)", flag);