Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release-src > by-pkgid > a4a0d1c8399898809d0c2e3f4ac34ae9 > files > 3

glibc-2.20-20.mga5.src.rpm

From ea5509237291f1a109d46052353ece197f4213bc Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@linux-m68k.org>
Date: Sat, 13 Sep 2014 10:10:29 +0200
Subject: [PATCH 03/18] Handle zero prefix length in getifaddrs (BZ #17371)

(cherry picked from commit a7b872687073decdcc7effc2289877d69058aca9)

Conflicts:
	NEWS
---
 ChangeLog                         |  6 ++++++
 NEWS                              |  6 ++++++
 sysdeps/unix/sysv/linux/ifaddrs.c | 11 ++++-------
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index cc99818..ed6b9ab 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-12  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/gnu/netinet/udp.h (UDP_NO_CHECK6_TX): New macro.
diff --git a/NEWS b/NEWS
index 721b457..3373c96 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,12 @@ See the end for copying conditions.
 Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
 using `glibc' in the "product" field.
 
+Version 2.20.1
+
+* The following bugs are resolved with this release:
+
+  17371.
+
 Version 2.20
 
 * The following bugs are resolved with this release:
diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
index 2c04e17..a47b2ed 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);
 		    }
 		}
 	    }
-- 
2.3.0