Apply by doing:
cd /usr/src
patch -p0 < 010_bgpd.patch
And then rebuild and install bgpd:
cd usr.sbin/bgpd
make depend
make
make install
Index: usr.sbin/bgpd/rde_attr.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde_attr.c,v
retrieving revision 1.76
diff -u -p -r1.76 rde_attr.c
--- usr.sbin/bgpd/rde_attr.c 8 May 2008 09:51:46 -0000 1.76
+++ usr.sbin/bgpd/rde_attr.c 18 Feb 2009 20:02:41 -0000
@@ -832,6 +832,8 @@ aspath_prepend(struct aspath *asp, u_int
size = 0;
}
+ if (quantum > 255)
+ fatalx("aspath_prepend: preposterous prepend");
if (quantum == 0) {
/* no change needed but return a copy */
p = malloc(asp->len);
@@ -843,7 +845,10 @@ aspath_prepend(struct aspath *asp, u_int
} else if (type == AS_SET || size + quantum > 255) {
/* need to attach a new AS_SEQUENCE */
l = 2 + quantum * sizeof(u_int32_t) + asp->len;
- overflow = type == AS_SET ? quantum : (size + quantum) & 0xff;
+ if (type == AS_SET)
+ overflow = quantum;
+ else
+ overflow = size + quantum - 255;
} else
l = quantum * sizeof(u_int32_t) + asp->len;