summarylogtreecommitdiffstats
path: root/glibc-2.20-getifaddrs_internal-segfault.patch
diff options
context:
space:
mode:
Diffstat (limited to 'glibc-2.20-getifaddrs_internal-segfault.patch')
-rw-r--r--glibc-2.20-getifaddrs_internal-segfault.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/glibc-2.20-getifaddrs_internal-segfault.patch b/glibc-2.20-getifaddrs_internal-segfault.patch
new file mode 100644
index 000000000000..57c84f8b4792
--- /dev/null
+++ b/glibc-2.20-getifaddrs_internal-segfault.patch
@@ -0,0 +1,29 @@
+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);
+ }
+ }
+ }