]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd zebra: element overflow (PVS-Studio)
authorF. Aragon <paco@voltanet.io>
Mon, 2 Jul 2018 15:05:17 +0000 (17:05 +0200)
committerF. Aragon <paco@voltanet.io>
Mon, 2 Jul 2018 17:06:54 +0000 (19:06 +0200)
The warning given by PVS-Studio is related to per-element overflow (there is
no real overflow, because of how elements are mapped in the union). This
same warning is typically reported by Coverity, too.

Signed-off-by: F. Aragon <paco@voltanet.io>
bgpd/bgp_label.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_route.c
zebra/connected.c
zebra/rtadv.c
zebra/zapi_msg.c

index ceca644de2f3a2d5393747f4da22456aa043e082..8a051b7ff0c986e6e30ebb9faaed469076361e27 100644 (file)
@@ -57,7 +57,7 @@ int bgp_parse_fec_update(void)
        memset(&p, 0, sizeof(struct prefix));
        p.family = stream_getw(s);
        p.prefixlen = stream_getc(s);
-       stream_get(&p.u.prefix, s, PSIZE(p.prefixlen));
+       stream_get(p.u.val, s, PSIZE(p.prefixlen));
        label = stream_getl(s);
 
        /* hack for the bgp instance & SAFI = have to send/receive it */
index 3a854be534bf39ff17534db70e3213d91be5ae44..847129fbe55b2284bde6c99726bdf29abb3a5b59 100644 (file)
@@ -220,7 +220,7 @@ int bgp_nlri_parse_vpn(struct peer *peer, struct attr *attr,
                p.prefixlen =
                        prefixlen
                        - VPN_PREFIXLEN_MIN_BYTES * 8; /* exclude label & RD */
-               memcpy(&p.u.prefix, pnt + VPN_PREFIXLEN_MIN_BYTES,
+               memcpy(p.u.val, pnt + VPN_PREFIXLEN_MIN_BYTES,
                       psize - VPN_PREFIXLEN_MIN_BYTES);
 
                if (attr) {
index 7057b62f2b00a47271b8eaa19d28602ae7599392..bb5d18aa6a0ef7669d593fe58fe470ad5a58465e 100644 (file)
@@ -4237,7 +4237,7 @@ int bgp_nlri_parse_ip(struct peer *peer, struct attr *attr,
                }
 
                /* Fetch prefix from NLRI packet. */
-               memcpy(&p.u.prefix, pnt, psize);
+               memcpy(p.u.val, pnt, psize);
 
                /* Check address. */
                if (afi == AFI_IP && safi == SAFI_UNICAST) {
index a9a4dfe08f469f786a45af04438c95aa67c8c38f..8869d34fd6f886f9a1b69e077b8fe9e9b09e268c 100644 (file)
@@ -564,7 +564,7 @@ void connected_delete_ipv6(struct interface *ifp, struct in6_addr *address,
        if (broad) {
                memset(&d, 0, sizeof(struct prefix));
                d.family = AF_INET6;
-               IPV6_ADDR_COPY(&d.u.prefix, broad);
+               IPV6_ADDR_COPY(&d.u.prefix6, broad);
                d.prefixlen = prefixlen;
                ifc = connected_check_ptp(ifp, &p, &d);
        } else
index dc918b1a9b335e92d802972d124d2b4144c3dcda..49ffcdd490528777609de6beb653328a28fbec06 100644 (file)
@@ -518,7 +518,7 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len,
 
        /* Create entry for neighbor if not known. */
        p.family = AF_INET6;
-       IPV6_ADDR_COPY(&p.u.prefix, &addr->sin6_addr);
+       IPV6_ADDR_COPY(&p.u.prefix6, &addr->sin6_addr);
        p.prefixlen = IPV6_MAX_PREFIXLEN;
 
        if (!nbr_connected_check(ifp, &p))
index 6e0d86d668eeb5d251df638bd9f6fb17383841f8..08666bf37dd2316284099188a8081b20bd71282c 100644 (file)
@@ -448,7 +448,7 @@ void nbr_connected_add_ipv6(struct interface *ifp, struct in6_addr *address)
        struct prefix p;
 
        p.family = AF_INET6;
-       IPV6_ADDR_COPY(&p.u.prefix, address);
+       IPV6_ADDR_COPY(&p.u.prefix6, address);
        p.prefixlen = IPV6_MAX_PREFIXLEN;
 
        ifc = listnode_head(ifp->nbr_connected);
@@ -473,7 +473,7 @@ void nbr_connected_delete_ipv6(struct interface *ifp, struct in6_addr *address)
        struct prefix p;
 
        p.family = AF_INET6;
-       IPV6_ADDR_COPY(&p.u.prefix, address);
+       IPV6_ADDR_COPY(&p.u.prefix6, address);
        p.prefixlen = IPV6_MAX_PREFIXLEN;
 
        ifc = nbr_connected_check(ifp, &p);