aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2014-09-13 10:10:29 +0200
committerAndreas Schwab <schwab@linux-m68k.org>2014-09-15 18:59:37 +0200
commita7b872687073decdcc7effc2289877d69058aca9 (patch)
tree45e2241ca8b82dcae52420f821c4889fdd69e62c /sysdeps/unix/sysv/linux/ifaddrs.c
parentRemove _POSIX_REGEX_VERSION (diff)
downloadglibc-a7b872687073decdcc7effc2289877d69058aca9.tar.gz
glibc-a7b872687073decdcc7effc2289877d69058aca9.tar.bz2
glibc-a7b872687073decdcc7effc2289877d69058aca9.zip
Handle zero prefix length in getifaddrs (BZ #17371)
Diffstat (limited to 'sysdeps/unix/sysv/linux/ifaddrs.c')
-rw-r--r--sysdeps/unix/sysv/linux/ifaddrs.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
index 2c04e172ce..a47b2edcad 100644
--- a/sysdeps/unix/sysv/linux/ifaddrs.c
+++ b/sysdeps/unix/sysv/linux/ifaddrs.c
@@ -770,20 +770,17 @@ getifaddrs_internal (struct ifaddrs **ifap)
if (cp != NULL)
{
- char c;
unsigned int preflen;
- if ((max_prefixlen > 0) &&
- (ifam->ifa_prefixlen > max_prefixlen))
+ if (ifam->ifa_prefixlen > max_prefixlen)
preflen = max_prefixlen;
else
preflen = ifam->ifa_prefixlen;
- for (i = 0; i < ((preflen - 1) / 8); i++)
+ for (i = 0; i < preflen / 8; i++)
*cp++ = 0xff;
- c = 0xff;
- c <<= ((128 - preflen) % 8);
- *cp = c;
+ if (preflen % 8)
+ *cp = 0xff << (8 - preflen % 8);
}
}
}