summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--proto/bgp/packets.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
index ce3d71e..1370ee7 100644
--- a/proto/bgp/packets.c
+++ b/proto/bgp/packets.c
@@ -777,19 +777,14 @@ bgp_do_rx_update(struct bgp_conn *conn,
/* Create fake NEXT_HOP attribute */
if (len < 1 || (*x != 16 && *x != 32) || len < *x + 2)
goto bad;
- memcpy(bgp_attach_attr_wa(&a0->eattrs, bgp_linpool, BA_NEXT_HOP, 16), x+1, 16);
- len -= *x + 2;
- x += *x + 1;
- /* Ignore SNPA info */
- i = *x++;
- while (i--)
- {
- if (len < 1 || len < 1 + *x)
- goto bad;
- len -= *x + 1;
- x += *x + 1;
- }
+ byte *nh = bgp_attach_attr_wa(&a0->eattrs, bgp_linpool, BA_NEXT_HOP, 16);
+ memcpy(nh, x+1, 16);
+ ipa_ntoh(*(ip_addr *)nh);
+
+ /* Also ignore one reserved byte */
+ len -= *x + 2;
+ x += *x + 2;
if (bgp_get_nexthop(p, a0))
{