This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi!
For details see
http://bugzilla.redhat.com/beta2/show_bug.cgi?id=139559
gaih_inet was not freeing air, furthermore there are a couple of issues
in __nscd_getai itself:
1) if malloc fails, it wouldn't close the socket nor drop map ref
2) if it detects database corruption, it wouldn't free resultbuf
3) if drop_map_ref fails and retval != -1, we could have stored already
resultbuf we are going to free to *result. But if for some reason during
the retry we end up returning -1 or ENOENT/0 (i.e. we don't overwrite
*result), the caller will be looking into freed up buffer
2004-11-22 Jakub Jelinek <jakub@redhat.com>
* nscd/nscd_getai (__nscd_getai): Avoid memory and file descriptor
leaks.
* sysdeps/posix/getaddrinfo.c (gaih_inet): Free air.
--- libc/nscd/nscd_getai.c.jj 2004-11-10 10:30:32.000000000 +0100
+++ libc/nscd/nscd_getai.c 2004-11-22 11:03:41.658695898 +0100
@@ -104,7 +104,7 @@ __nscd_getai (const char *key, struct ns
if (resultbuf == NULL)
{
*h_errnop = NETDB_INTERNAL;
- return -1;
+ goto out_close;
}
/* Set up the data structure, including pointers. */
@@ -140,7 +140,10 @@ __nscd_getai (const char *key, struct ns
if (resultbuf->canon != NULL
&& resultbuf->canon[ai_resp->canonlen - 1] != '\0')
/* We cannot use the database. */
- goto out_close;
+ {
+ free (resultbuf);
+ goto out_close;
+ }
retval = 0;
*result = resultbuf;
@@ -173,6 +176,7 @@ __nscd_getai (const char *key, struct ns
mapped = NO_MAPPING;
}
+ *result = NULL;
free (resultbuf);
goto retry;
--- libc/sysdeps/posix/getaddrinfo.c.jj 2004-09-30 00:50:11.000000000 +0200
+++ libc/sysdeps/posix/getaddrinfo.c 2004-11-22 11:03:57.679819031 +0100
@@ -767,6 +767,8 @@ gaih_inet (const char *name, const struc
addrs += size;
}
+ free (air);
+
if (at->family == AF_UNSPEC)
return (GAIH_OKIFUNSPEC | -EAI_NONAME);
Jakub
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |