about summary refs log tree commit diff
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
parent61fe374a44a92621e0b75ec1f011ff1fba6c2148 (diff)
downloadglibc-a7b872687073decdcc7effc2289877d69058aca9.tar.gz
glibc-a7b872687073decdcc7effc2289877d69058aca9.tar.xz
glibc-a7b872687073decdcc7effc2289877d69058aca9.zip
Handle zero prefix length in getifaddrs (BZ #17371)
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--sysdeps/unix/sysv/linux/ifaddrs.c11
3 files changed, 11 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index e316f8c3b2..a40fb4622c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-15  Andreas Schwab  <schwab@linux-m68k.org>
+
+	[BZ #17371]
+	* sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs_internal): Fix
+	last change to handle zero prefix length.
+
 2014-09-15  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* sysdeps/posix/sysconf.c (__sysconf): Return -1 for
diff --git a/NEWS b/NEWS
index 680c265c68..231159071e 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.21
 
 * The following bugs are resolved with this release:
 
-  17363, 17370.
+  17363, 17370, 17371.
 
 Version 2.20
 
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);
 		    }
 		}
 	    }