* and if so it checks that standard BGP doesn't make sense.
*/
static int
-check_add_path(const u_char *pptr, u_int length, u_int max_prefix_length)
+check_add_path(netdissect_options *ndo, const u_char *pptr, u_int length,
+ u_int max_prefix_length)
{
u_int offset, prefix_length;
/* check if it could be add path */
for (offset = 0; offset < length;) {
offset += 4;
+ ND_TCHECK_1(pptr + offset);
prefix_length = EXTRACT_U_1(pptr + offset);
/*
* Add 4 to cover the path id
/* check it's not standard BGP */
for (offset = 0; offset < length; ) {
+ ND_TCHECK_1(pptr + offset);
prefix_length = EXTRACT_U_1(pptr + offset);
/*
* If the prefix_length is zero (0.0.0.0/0)
/* assume not add-path by default */
return 0;
+trunc:
+ return -1;
}
static int
ND_PRINT((ndo, ", no SNPA"));
}
- add_path4 = check_add_path(tptr, (len-(tptr - pptr)), 32);
- add_path6 = check_add_path(tptr, (len-(tptr - pptr)), 128);
+ add_path4 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 32);
+ if (add_path4 == -1)
+ goto trunc;
+ add_path6 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 128);
+ if (add_path6 == -1)
+ goto trunc;
while (tptr < pptr + len) {
switch (af<<8 | safi) {
tptr += 3;
- add_path4 = check_add_path(tptr, (len-(tptr - pptr)), 32);
- add_path6 = check_add_path(tptr, (len-(tptr - pptr)), 128);
+ add_path4 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 32);
+ if (add_path4 == -1)
+ goto trunc;
+ add_path6 = check_add_path(ndo, tptr, (len-(tptr - pptr)), 128);
+ if (add_path6 == -1)
+ goto trunc;
while (tptr < pptr + len) {
switch (af<<8 | safi) {
if (length < withdrawn_routes_len)
goto trunc;
ND_PRINT((ndo, "\n\t Withdrawn routes:"));
- add_path = check_add_path(p, withdrawn_routes_len, 32);
+ add_path = check_add_path(ndo, p, withdrawn_routes_len, 32);
+ if (add_path == -1)
+ goto trunc;
while (withdrawn_routes_len != 0) {
if (add_path) {
if (withdrawn_routes_len < 4) {
}
if (length) {
- add_path = check_add_path(p, length, 32);
+ add_path = check_add_path(ndo, p, length, 32);
+ if (add_path == -1)
+ goto trunc;
ND_PRINT((ndo, "\n\t Updated routes:"));
while (length != 0) {
if (add_path) {
Cluster List (10), length: 4, Flags [O]: 22.5.5.5
Multi-Protocol Reach NLRI (14), length: 30, Flags [OE]:
AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
- nexthop: RD: 0:0 (= 0.0.0.0), 12.4.4.4, nh-length: 12, no SNPA
- RD: 500:500 (= 0.0.1.244), 133.0.0.0/8, label:100208 (bottom)
+ nexthop: RD: 0:0 (= 0.0.0.0), 12.4.4.4, nh-length: 12, no SNPA[|BGP]