aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2014-07-10 14:15:16 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2014-07-10 14:15:16 +0530
commitd62aa75af1941fca6f07e107afc447b7b248e340 (patch)
treea1864dfb0d666f1d9136fe644022e1c213ca60c5 /sysdeps
parent7000d82e01dc04344eaa1772698c9b0c304a892f (diff)
downloadglibc-d62aa75af1941fca6f07e107afc447b7b248e340.tar
glibc-d62aa75af1941fca6f07e107afc447b7b248e340.tar.gz
glibc-d62aa75af1941fca6f07e107afc447b7b248e340.tar.bz2
glibc-d62aa75af1941fca6f07e107afc447b7b248e340.zip
Fix crash when system has no ipv6 address [BZ #17125]
Here's an updated patch to fix the crash in bug-ga2 when the system has no configured ipv6 address. I have taken a different approach of using libc_freeres_fn instead of the libc_freeres_ptr since the former gives better control over what is freed; we need that since cache may or may not be allocated using malloc. Verified that bug-ga2 works correctly in both cases and does not have memory leaks in either of them.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/check_pf.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
index 1bc1def72f..c7fd9b0376 100644
--- a/sysdeps/unix/sysv/linux/check_pf.c
+++ b/sysdeps/unix/sysv/linux/check_pf.c
@@ -61,7 +61,7 @@ static struct cached_data noai6ai_cached =
.in6ailen = 0
};
-libc_freeres_ptr (static struct cached_data *cache);
+static struct cached_data *cache;
__libc_lock_define_initialized (static, lock);
@@ -401,6 +401,12 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
*seen_ipv6 = true;
}
+/* Free the cache if it has been allocated. */
+libc_freeres_fn (freecache)
+{
+ if (cache)
+ __free_in6ai (cache->in6ai);
+}
void
__free_in6ai (struct in6addrinfo *ai)