untrusted comment: verify with openbsd-72-base.pub
RWQTKNnK3CZZ8CDyqJo+jpqKqDIFbjKVD6cH6Kd600+od2nuvhIPM43Quc9Bi3yXlgs0abIh3yqeIZKtr4RKcAbHSb779jG3fA8=
OpenBSD 7.2 errata 028, July 12, 2023:
Incorrect length handling of path attributes in bgpd(8) can lead to a
session reset.
Apply by doing:
signify -Vep /etc/signify/openbsd-72-base.pub -x 028_bgpd.patch.sig \
-m - | (cd /usr/src && patch -p0)
And then rebuild and install bgpd(8):
cd /usr/src/usr.sbin/bgpd
make obj
make
make install
Index: usr.sbin/bgpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
diff -u -p -u -r1.578.2.1 rde.c
--- usr.sbin/bgpd/rde.c 21 Mar 2023 21:10:06 -0000 1.578.2.1
+++ usr.sbin/bgpd/rde.c 10 Jul 2023 12:45:38 -0000
@@ -1891,7 +1891,7 @@ bad_flags:
goto bad_flags;
if (peer->conf.ebgp) {
/* ignore local-pref attr on non ibgp peers */
- plen += 4;
+ plen += attr_len;
break;
}
if (a->flags & F_ATTR_LOCALPREF)
@@ -1915,7 +1915,7 @@ bad_flags:
* RFC 7606
*/
log_peer_warnx(&peer->conf, "bad AGGREGATOR, "
- "partial attribute ignored");
+ "attribute discarded");
plen += attr_len;
break;
}
@@ -1963,7 +1963,6 @@ bad_flags:
a->flags |= F_ATTR_PARSE_ERR;
log_peer_warnx(&peer->conf, "bad COMMUNITIES, "
"path invalidated and prefix withdrawn");
- break;
}
plen += attr_len;
break;
@@ -1980,7 +1979,6 @@ bad_flags:
a->flags |= F_ATTR_PARSE_ERR;
log_peer_warnx(&peer->conf, "bad LARGE COMMUNITIES, "
"path invalidated and prefix withdrawn");
- break;
}
plen += attr_len;
break;
@@ -1997,7 +1995,6 @@ bad_flags:
a->flags |= F_ATTR_PARSE_ERR;
log_peer_warnx(&peer->conf, "bad EXT_COMMUNITIES, "
"path invalidated and prefix withdrawn");
- break;
}
plen += attr_len;
break;
@@ -2044,10 +2041,8 @@ bad_flags:
case ATTR_AS4_AGGREGATOR:
if (attr_len != 8) {
/* see ATTR_AGGREGATOR ... */
- if ((flags & ATTR_PARTIAL) == 0)
- goto bad_len;
log_peer_warnx(&peer->conf, "bad AS4_AGGREGATOR, "
- "partial attribute ignored");
+ "attribute discarded");
plen += attr_len;
break;
}
@@ -2083,6 +2078,7 @@ bad_flags:
a->flags |= F_ATTR_PARSE_ERR;
log_peer_warnx(&peer->conf, "bad OTC, "
"path invalidated and prefix withdrawn");
+ plen += attr_len;
break;
}
if (!CHECK_FLAGS(flags, ATTR_OPTIONAL|ATTR_TRANSITIVE,