Again lots of minuses that can be replaced with very few plus lines.
This moves the prefixlen check into rde_update_get_prefix*() functions
since those can already return an error that is actually the same.

OK?
-- 
:wq Claudio

Index: rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
retrieving revision 1.388
diff -u -p -r1.388 rde.c
--- rde.c       10 Jul 2018 09:12:52 -0000      1.388
+++ rde.c       10 Jul 2018 14:17:28 -0000
@@ -1040,13 +1040,6 @@ rde_update_dispatch(struct imsg *imsg)
                            NULL, 0);
                        goto done;
                }
-               if (prefixlen > 32) {
-                       log_peer_warnx(&peer->conf, "bad withdraw prefix");
-                       rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK,
-                           NULL, 0);
-                       goto done;
-               }
-
                p += pos;
                len -= pos;
 
@@ -1120,15 +1113,6 @@ rde_update_dispatch(struct imsg *imsg)
                                            mpa.unreach, mpa.unreach_len);
                                        goto done;
                                }
-                               if (prefixlen > 128) {
-                                       log_peer_warnx(&peer->conf,
-                                           "bad IPv6 withdraw prefix");
-                                       rde_update_err(peer, ERR_UPDATE,
-                                           ERR_UPD_OPTATTR,
-                                           mpa.unreach, mpa.unreach_len);
-                                       goto done;
-                               }
-
                                mpp += pos;
                                mplen -= pos;
 
@@ -1146,15 +1130,6 @@ rde_update_dispatch(struct imsg *imsg)
                                            mpa.unreach, mpa.unreach_len);
                                        goto done;
                                }
-                               if (prefixlen > 32) {
-                                       log_peer_warnx(&peer->conf,
-                                           "bad VPNv4 withdraw prefix");
-                                       rde_update_err(peer, ERR_UPDATE,
-                                           ERR_UPD_OPTATTR,
-                                           mpa.unreach, mpa.unreach_len);
-                                       goto done;
-                               }
-
                                mpp += pos;
                                mplen -= pos;
 
@@ -1190,13 +1165,6 @@ rde_update_dispatch(struct imsg *imsg)
                            NULL, 0);
                        goto done;
                }
-               if (prefixlen > 32) {
-                       log_peer_warnx(&peer->conf, "bad nlri prefix");
-                       rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK,
-                           NULL, 0);
-                       goto done;
-               }
-
                p += pos;
                nlri_len -= pos;
 
@@ -1269,13 +1237,6 @@ rde_update_dispatch(struct imsg *imsg)
                                            mpa.reach, mpa.reach_len);
                                        goto done;
                                }
-                               if (prefixlen > 128) {
-                                       rde_update_err(peer, ERR_UPDATE,
-                                           ERR_UPD_OPTATTR,
-                                           mpa.reach, mpa.reach_len);
-                                       goto done;
-                               }
-
                                mpp += pos;
                                mplen -= pos;
 
@@ -1295,13 +1256,6 @@ rde_update_dispatch(struct imsg *imsg)
                                            mpa.reach, mpa.reach_len);
                                        goto done;
                                }
-                               if (prefixlen > 32) {
-                                       rde_update_err(peer, ERR_UPDATE,
-                                           ERR_UPD_OPTATTR,
-                                           mpa.reach, mpa.reach_len);
-                                       goto done;
-                               }
-
                                mpp += pos;
                                mplen -= pos;
 
@@ -1913,6 +1867,8 @@ rde_update_get_prefix(u_char *p, u_int16
        prefix->aid = AID_INET;
        *prefixlen = pfxlen;
 
+       if (pfxlen > 32)
+               return (-1);
        if ((plen = rde_update_extract_prefix(p, len, &prefix->v4, pfxlen,
            sizeof(prefix->v4))) == -1)
                return (-1);
@@ -1937,6 +1893,8 @@ rde_update_get_prefix6(u_char *p, u_int1
        prefix->aid = AID_INET6;
        *prefixlen = pfxlen;
 
+       if (pfxlen > 128)
+               return (-1);
        if ((plen = rde_update_extract_prefix(p, len, &prefix->v6, pfxlen,
            sizeof(prefix->v6))) == -1)
                return (-1);
@@ -1998,6 +1956,8 @@ rde_update_get_vpn4(u_char *p, u_int16_t
        prefix->aid = AID_VPN_IPv4;
        *prefixlen = pfxlen;
 
+       if (pfxlen > 32)
+               return (-1);
        if ((rv = rde_update_extract_prefix(p, len, &prefix->vpn4.addr,
            pfxlen, sizeof(prefix->vpn4.addr))) == -1)
                return (-1);

Reply via email to