/* IPv6 prefix. */
prefix.family = AF_INET6;
- prefix.prefixlen = stream_getc (s);
+ prefix.prefixlen = MIN (IPV6_MAX_PREFIXLEN, stream_getc (s));
stream_get (&prefix.prefix, s, PSIZE (prefix.prefixlen));
memset(&src_p, 0, sizeof(src_p));
api.flags = stream_getl (s);
api.message = stream_getc (s);
- /* IPv6 prefix. */
+ /* IPv4 prefix. */
prefix.family = AF_INET;
- prefix.prefixlen = stream_getc (s);
+ prefix.prefixlen = MIN (IPV4_MAX_PREFIXLEN, stream_getc (s));
stream_get (&prefix.prefix, s, PSIZE (prefix.prefixlen));
/* Nexthop, ifindex, distance, metric. */
/* IPv4 prefix. */
memset(&p, 0, sizeof(struct prefix_ipv4));
p.family = AF_INET;
- p.prefixlen = stream_getc(s);
+ p.prefixlen = MIN(IPV4_MAX_PREFIXLEN, stream_getc(s));
stream_get(&p.prefix, s, PSIZE(p.prefixlen));
if (IPV4_NET127(ntohl(p.prefix.s_addr)))
case ZEBRA_REDISTRIBUTE_IPV4_ADD:
case ZEBRA_REDISTRIBUTE_IPV4_DEL:
kr.af = AF_INET;
+ kr.prefixlen = MIN(IPV4_MAX_PREFIXLEN, stream_getc(s));
nhlen = sizeof(struct in_addr);
break;
case ZEBRA_REDISTRIBUTE_IPV6_ADD:
case ZEBRA_REDISTRIBUTE_IPV6_DEL:
kr.af = AF_INET6;
+ kr.prefixlen = MIN(IPV6_MAX_PREFIXLEN, stream_getc(s));
nhlen = sizeof(struct in6_addr);
break;
default:
fatalx("ldp_zebra_read_route: unknown command");
}
- kr.prefixlen = stream_getc(s);
stream_get(&kr.prefix, s, PSIZE(kr.prefixlen));
if (bad_addr(kr.af, &kr.prefix) ||
case ZEBRA_REDISTRIBUTE_IPV4_ADD:
case ZEBRA_REDISTRIBUTE_IPV4_DEL:
prefix.family = AF_INET;
+ prefix.prefixlen = MIN(IPV4_MAX_PREFIXLEN, stream_getc(s));
break;
case ZEBRA_REDISTRIBUTE_IPV6_ADD:
case ZEBRA_REDISTRIBUTE_IPV6_DEL:
prefix.family = AF_INET6;
+ prefix.prefixlen = MIN(IPV6_MAX_PREFIXLEN, stream_getc(s));
break;
default:
return -1;
}
afaddrlen = family2addrsize(prefix.family);
- prefix.prefixlen = stream_getc(s);
stream_get(&prefix.u.val, s, PSIZE(prefix.prefixlen));
memset(&src_p, 0, sizeof(src_p));