]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Fix a runtime shift error.
authorMaya Rashish <coypu@sdf.org>
Fri, 30 Jun 2017 15:51:49 +0000 (16:51 +0100)
committerRoy Marples <roy@marples.name>
Fri, 30 Jun 2017 15:51:49 +0000 (16:51 +0100)
src/sa.c

index 403c98375e756d7be8b642f5d8ade0d9a8267833..5cdff18e93bf02a15ad94f44d43d3705f98c8c86 100644 (file)
--- a/src/sa.c
+++ b/src/sa.c
@@ -197,18 +197,18 @@ sa_toprefix(const struct sockaddr *sa)
        case AF_INET:
        {
                const struct sockaddr_in *sin;
-               int mask;
+               uint32_t mask;
 
                sin = satocsin(sa);
                if (sin->sin_addr.s_addr == INADDR_ANY) {
                        prefix = 0;
                        break;
                }
-               mask = (int)ntohl(sin->sin_addr.s_addr);
-               prefix = 33 - ffs(mask);        /* 33 - (1 .. 32) -> 32 .. 1 */
+               mask = ntohl(sin->sin_addr.s_addr);
+               prefix = 33 - ffs((int)mask);   /* 33 - (1 .. 32) -> 32 .. 1 */
                if (prefix < 32) {              /* more than 1 bit in mask */
                        /* check for non-contig netmask */
-                       if ((mask ^ (((1 << prefix)-1) << (32 - prefix))) != 0){
+                       if ((mask^(((1U << prefix)-1) << (32 - prefix))) != 0) {
                                errno = EINVAL;
                                return -1;      /* noncontig, no pfxlen */
                        }