diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-03-11 16:28:34 -0500 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-03-11 18:29:14 -0500 |
commit | 5e57b5fc621300427d3818f0723b8cd8d5e5ca6a (patch) | |
tree | 738345e0c3121f329266e8b8faaa88661e7cdb2e /ospf6d/ospf6_zebra.c | |
parent | e3f623be8b6556db9d70c2fc5d3c2b152f36dc1d (diff) | |
download | quagga-5e57b5fc621300427d3818f0723b8cd8d5e5ca6a.tar.bz2 quagga-5e57b5fc621300427d3818f0723b8cd8d5e5ca6a.tar.xz |
quagga: Remove double read of stream
The addition of a MIN(X,Y) with a stream_getc in the Y
causes a double read of the stream due to the way that
MIN is defined.
This fix removes a crash in all protocols.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'ospf6d/ospf6_zebra.c')
-rw-r--r-- | ospf6d/ospf6_zebra.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c index 0caf0014..c8f20d86 100644 --- a/ospf6d/ospf6_zebra.c +++ b/ospf6d/ospf6_zebra.c @@ -213,6 +213,7 @@ ospf6_zebra_read_ipv6 (int command, struct zclient *zclient, unsigned long ifindex; struct prefix_ipv6 p; struct in6_addr *nexthop; + unsigned char plength = 0; s = zclient->ibuf; ifindex = 0; @@ -227,7 +228,8 @@ ospf6_zebra_read_ipv6 (int command, struct zclient *zclient, /* IPv6 prefix. */ memset (&p, 0, sizeof (struct prefix_ipv6)); p.family = AF_INET6; - p.prefixlen = MIN(IPV6_MAX_PREFIXLEN, stream_getc (s)); + plength = stream_getc (s); + p.prefixlen = MIN(IPV6_MAX_PREFIXLEN, plength); stream_get (&p.prefix, s, PSIZE (p.prefixlen)); /* Nexthop, ifindex, distance, metric. */ |