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.
This commit is contained in:
Siddhesh Poyarekar 2014-07-10 14:15:16 +05:30
parent 7000d82e01
commit d62aa75af1
3 changed files with 13 additions and 2 deletions

View File

@ -1,5 +1,10 @@
2014-07-10 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #17125]
* sysdeps/unix/sysv/linux/check_pf.c (cache): Don't use
libc_freeres_ptr.
(freecache): New function to free CACHE on exit.
* sunrpc/xdr.c (xdr_string): Add comment about SIZE
initialization.

2
NEWS
View File

@ -21,7 +21,7 @@ Version 2.20
16882, 16885, 16888, 16890, 16912, 16915, 16916, 16917, 16918, 16922,
16927, 16928, 16932, 16943, 16958, 16965, 16966, 16967, 16977, 16978,
16984, 16990, 16996, 17009, 17022, 17031, 17042, 17048, 17050, 17058,
17061, 17062, 17069, 17075, 17079, 17084, 17086, 17092, 17097.
17061, 17062, 17069, 17075, 17079, 17084, 17086, 17092, 17097, 17125.
* Optimized strchr implementation for AArch64. Contributed by ARM Ltd.

View File

@ -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)