Besides fixing a tautological 'v < 0' and using more descriptive/less
errorprone sizeof(target) this patch unifies strtoul(3) handling both
logically and cosmetically.

Index: brconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/brconfig.c,v
retrieving revision 1.14
diff -u -p -r1.14 brconfig.c
--- brconfig.c  28 Nov 2016 10:12:50 -0000      1.14
+++ brconfig.c  2 Jun 2017 15:55:29 -0000
@@ -220,7 +220,6 @@ bridge_ifsetflag(const char *ifsname, u_
                err(1, "%s: ioctl SIOCBRDGGIFFLGS %s", name, ifsname);

        req.ifbr_ifsflags |= flag & ~IFBIF_RO_MASK;
-
        if (ioctl(s, SIOCBRDGSIFFLGS, (caddr_t)&req) < 0)
                err(1, "%s: ioctl SIOCBRDGSIFFLGS %s", name, ifsname);
}
@@ -232,12 +231,10 @@ bridge_ifclrflag(const char *ifsname, u_

        strlcpy(req.ifbr_name, name, sizeof(req.ifbr_name));
        strlcpy(req.ifbr_ifsname, ifsname, sizeof(req.ifbr_ifsname));
-
        if (ioctl(s, SIOCBRDGGIFFLGS, (caddr_t)&req) < 0)
                err(1, "%s: ioctl SIOCBRDGGIFFLGS %s", name, ifsname);

        req.ifbr_ifsflags &= ~(flag | IFBIF_RO_MASK);
-
        if (ioctl(s, SIOCBRDGSIFFLGS, (caddr_t)&req) < 0)
                err(1, "%s: ioctl SIOCBRDGSIFFLGS %s", name, ifsname);
}
@@ -425,7 +422,8 @@ bridge_maxage(const char *arg, int d)

        errno = 0;
        v = strtoul(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || v > 0xffUL ||
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           v == 0 || v > sizeof(bp.ifbrp_maxage) ||
            (errno == ERANGE && v == ULONG_MAX))
                errx(1, "invalid arg for maxage: %s", arg);

@@ -444,7 +442,8 @@ bridge_priority(const char *arg, int d)

        errno = 0;
        v = strtoul(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || v > 0xffffUL ||
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           v == 0 || v > sizeof(bp.ifbrp_prio) ||
            (errno == ERANGE && v == ULONG_MAX))
                errx(1, "invalid arg for spanpriority: %s", arg);

@@ -483,7 +482,8 @@ bridge_fwddelay(const char *arg, int d)

        errno = 0;
        v = strtoul(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || v > 0xffUL ||
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           v == 0 || v > sizeof(bp.ifbrp_fwddelay) ||
            (errno == ERANGE && v == ULONG_MAX))
                errx(1, "invalid arg for fwddelay: %s", arg);

@@ -502,7 +502,8 @@ bridge_hellotime(const char *arg, int d)

        errno = 0;
        v = strtoul(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || v > 0xffUL ||
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           v == 0 || v > sizeof(bp.ifbrp_hellotime) ||
            (errno == ERANGE && v == ULONG_MAX))
                errx(1, "invalid arg for hellotime: %s", arg);

@@ -521,7 +522,8 @@ bridge_maxaddr(const char *arg, int d)

        errno = 0;
        newsize = strtoul(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || newsize > 0xffffffffUL ||
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           newsize == 0 || newsize > sizeof(bp.ifbrp_csize) ||
            (errno == ERANGE && newsize == ULONG_MAX))
                errx(1, "invalid arg for maxaddr: %s", arg);

@@ -537,13 +539,12 @@ bridge_deladdr(const char *addr, int d)
        struct ifbareq ifba;
        struct ether_addr *ea;

-       strlcpy(ifba.ifba_name, name, sizeof(ifba.ifba_name));
        ea = ether_aton(addr);
        if (ea == NULL)
                err(1, "Invalid address: %s", addr);

+       strlcpy(ifba.ifba_name, name, sizeof(ifba.ifba_name));
        bcopy(ea, &ifba.ifba_dst, sizeof(struct ether_addr));
-
        if (ioctl(s, SIOCBRDGDADDR, &ifba) < 0)
                err(1, "%s: %s", name, addr);
}
@@ -555,16 +556,16 @@ bridge_ifprio(const char *ifname, const unsigned long v;
        char *endptr;

-       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
-       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
-
        errno = 0;
        v = strtoul(val, &endptr, 0);
-       if (val[0] == '\0' || endptr[0] != '\0' || v > 0xffUL ||
+       if (val[0] == '\0' || endptr[0] != '\0' ||
+           v == 0 || v > sizeof(breq.ifbr_priority) ||
            (errno == ERANGE && v == ULONG_MAX))
-               err(1, "invalid arg for ifpriority: %s", val);
-       breq.ifbr_priority = v;
+               errx(1, "invalid arg for ifpriority: %s", val);

+       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
+       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
+       breq.ifbr_priority = v;
        if (ioctl(s, SIOCBRDGSIFPRIO, (caddr_t)&breq) < 0)
                err(1, "%s: %s", name, val);
}
@@ -576,18 +577,16 @@ bridge_ifcost(const char *ifname, const unsigned long v;
        char *endptr;

-       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
-       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
-
        errno = 0;
        v = strtoul(val, &endptr, 0);
        if (val[0] == '\0' || endptr[0] != '\0' ||
-           v < 0 || v > 0xffffffffUL ||
+           v == 0 || v > sizeof(breq.ifbr_path_cost) ||
            (errno == ERANGE && v == ULONG_MAX))
                errx(1, "invalid arg for ifcost: %s", val);

+       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
+       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
        breq.ifbr_path_cost = v;
-
        if (ioctl(s, SIOCBRDGSIFCOST, (caddr_t)&breq) < 0)
                err(1, "%s: %s", name, val);
}
@@ -599,9 +598,7 @@ bridge_noifcost(const char *ifname, int
        strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
        strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
-
        breq.ifbr_path_cost = 0;
-
        if (ioctl(s, SIOCBRDGSIFCOST, (caddr_t)&breq) < 0)
                err(1, "%s", name);
}
@@ -612,16 +609,14 @@ bridge_addaddr(const char *ifname, const
        struct ifbareq ifba;
        struct ether_addr *ea;

-       strlcpy(ifba.ifba_name, name, sizeof(ifba.ifba_name));
-       strlcpy(ifba.ifba_ifsname, ifname, sizeof(ifba.ifba_ifsname));
-
        ea = ether_aton(addr);
        if (ea == NULL)
                errx(1, "Invalid address: %s", addr);

+       strlcpy(ifba.ifba_name, name, sizeof(ifba.ifba_name));
+       strlcpy(ifba.ifba_ifsname, ifname, sizeof(ifba.ifba_ifsname));
        bcopy(ea, &ifba.ifba_dst, sizeof(struct ether_addr));
        ifba.ifba_flags = IFBAF_STATIC;
-
        if (ioctl(s, SIOCBRDGSADDR, &ifba) < 0)
                err(1, "%s: %s", name, addr);
}
@@ -701,7 +696,6 @@ is_bridge(char *brdg)
        struct ifbaconf ifbac;

        strlcpy(ifr.ifr_name, brdg, sizeof(ifr.ifr_name));
-
        if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0)
                return (0);

@@ -1052,7 +1046,9 @@ switch_datapathid(const char *arg, int d

        errno = 0;
        newdpid = strtoull(arg, &endptr, 0);
-       if (arg[0] == '\0' || endptr[0] != '\0' || errno == ERANGE)
+       if (arg[0] == '\0' || endptr[0] != '\0' ||
+           newdpid == 0 || newdpid > sizeof(bp.ifbrp_datapath) ||
+           (errno == ERANGE && newdpid == ULLONG_MAX))
                errx(1, "invalid arg for datapath-id: %s", arg);

        strlcpy(bp.ifbrp_name, name, sizeof(bp.ifbrp_name));
@@ -1068,14 +1064,13 @@ switch_portno(const char *ifname, const uint32_t newportidx;
        char *endptr;

-       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
-       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
-
        errno = 0;
        newportidx = strtol(val, &endptr, 0);
        if (val[0] == '\0' || endptr[0] != '\0' || errno == ERANGE)
                errx(1, "invalid arg for portidx: %s", val);

+       strlcpy(breq.ifbr_name, name, sizeof(breq.ifbr_name));
+       strlcpy(breq.ifbr_ifsname, ifname, sizeof(breq.ifbr_ifsname));
        breq.ifbr_portno = newportidx;
        if (ioctl(s, SIOCSWSPORTNO, (caddr_t)&breq) < 0)
                err(1, "%s", name);

Reply via email to