diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-07-10 14:15:16 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-07-10 14:15:16 +0530 |
commit | d62aa75af1941fca6f07e107afc447b7b248e340 (patch) | |
tree | a1864dfb0d666f1d9136fe644022e1c213ca60c5 /sysdeps/unix/sysv/linux/check_pf.c | |
parent | 7000d82e01dc04344eaa1772698c9b0c304a892f (diff) | |
download | glibc-d62aa75af1941fca6f07e107afc447b7b248e340.tar.gz glibc-d62aa75af1941fca6f07e107afc447b7b248e340.tar.xz 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/unix/sysv/linux/check_pf.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/check_pf.c | 8 |
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) |