mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-22 04:01:57 +03:00
Fix resolver inet_* namespace (bug 17722).
Parts of the resolver brought in by pthreads (at least) use inet_* functions that aren't in the 1995/6 edition of POSIX that introduced pthreads (or in one case, use __inet_aton which is then defined in the same file as non-weak inet_addr). This patch fixes this by making the affected functions into weak alias for __inet_* and using those names in the problematic resolver code. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17722] * inet/inet_mkadr.c (inet_makeaddr): Rename to __inet_makeaddr and define as weak alias of __inet_makeaddr. * resolv/inet_addr.c (inet_addr): Rename to __inet_addr and define as weak alias of __inet_addr. * resolv/inet_pton.c (inet_pton): Rename to __inet_pton and define as weak alias of __inet_pton. Use libc_hidden_weak. * include/arpa/inet.h (__inet_pton): Declare. Use libc_hidden_proto. (inet_makeaddr): Don't use libc_hidden_proto. (__inet_makeaddr): Declare. Use libc_hidden_proto. * resolv/res_init.c (__res_vinit): Use __inet_pton instead of inet_pton. Use __inet_makeaddr instead of inet_makeaddr. * conform/Makefile (test-xfail-POSIX/pthread.h/linknamespace): Remove variable. (test-xfail-POSIX/sched.h/linknamespace): Likewise. (test-xfail-POSIX/time.h/linknamespace): Likewise.
This commit is contained in:
20
ChangeLog
20
ChangeLog
@ -1,3 +1,23 @@
|
|||||||
|
2014-12-17 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #17722]
|
||||||
|
* inet/inet_mkadr.c (inet_makeaddr): Rename to __inet_makeaddr and
|
||||||
|
define as weak alias of __inet_makeaddr.
|
||||||
|
* resolv/inet_addr.c (inet_addr): Rename to __inet_addr and define
|
||||||
|
as weak alias of __inet_addr.
|
||||||
|
* resolv/inet_pton.c (inet_pton): Rename to __inet_pton and define
|
||||||
|
as weak alias of __inet_pton. Use libc_hidden_weak.
|
||||||
|
* include/arpa/inet.h (__inet_pton): Declare. Use
|
||||||
|
libc_hidden_proto.
|
||||||
|
(inet_makeaddr): Don't use libc_hidden_proto.
|
||||||
|
(__inet_makeaddr): Declare. Use libc_hidden_proto.
|
||||||
|
* resolv/res_init.c (__res_vinit): Use __inet_pton instead of
|
||||||
|
inet_pton. Use __inet_makeaddr instead of inet_makeaddr.
|
||||||
|
* conform/Makefile (test-xfail-POSIX/pthread.h/linknamespace):
|
||||||
|
Remove variable.
|
||||||
|
(test-xfail-POSIX/sched.h/linknamespace): Likewise.
|
||||||
|
(test-xfail-POSIX/time.h/linknamespace): Likewise.
|
||||||
|
|
||||||
2014-12-17 Steve Ellcey <sellcey@imgtec.com>
|
2014-12-17 Steve Ellcey <sellcey@imgtec.com>
|
||||||
|
|
||||||
* inet/getnetgrent_r.c: Move while loop to be inside if statement.
|
* inet/getnetgrent_r.c: Move while loop to be inside if statement.
|
||||||
|
3
NEWS
3
NEWS
@ -14,7 +14,8 @@ Version 2.21
|
|||||||
17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508,
|
17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508,
|
||||||
17522, 17555, 17570, 17571, 17572, 17573, 17574, 17581, 17582, 17583,
|
17522, 17555, 17570, 17571, 17572, 17573, 17574, 17581, 17582, 17583,
|
||||||
17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633,
|
17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633,
|
||||||
17634, 17647, 17653, 17657, 17664, 17665, 17668, 17682, 17717, 17719.
|
17634, 17647, 17653, 17657, 17664, 17665, 17668, 17682, 17717, 17719,
|
||||||
|
17722.
|
||||||
|
|
||||||
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
|
||||||
under certain input conditions resulting in the execution of a shell for
|
under certain input conditions resulting in the execution of a shell for
|
||||||
|
@ -371,11 +371,8 @@ test-xfail-POSIX/aio.h/linknamespace = yes
|
|||||||
test-xfail-POSIX/fnmatch.h/linknamespace = yes
|
test-xfail-POSIX/fnmatch.h/linknamespace = yes
|
||||||
test-xfail-POSIX/glob.h/linknamespace = yes
|
test-xfail-POSIX/glob.h/linknamespace = yes
|
||||||
test-xfail-POSIX/mqueue.h/linknamespace = yes
|
test-xfail-POSIX/mqueue.h/linknamespace = yes
|
||||||
test-xfail-POSIX/pthread.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX/regex.h/linknamespace = yes
|
test-xfail-POSIX/regex.h/linknamespace = yes
|
||||||
test-xfail-POSIX/sched.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX/semaphore.h/linknamespace = yes
|
test-xfail-POSIX/semaphore.h/linknamespace = yes
|
||||||
test-xfail-POSIX/time.h/linknamespace = yes
|
|
||||||
test-xfail-POSIX/unistd.h/linknamespace = yes
|
test-xfail-POSIX/unistd.h/linknamespace = yes
|
||||||
test-xfail-POSIX/wordexp.h/linknamespace = yes
|
test-xfail-POSIX/wordexp.h/linknamespace = yes
|
||||||
test-xfail-UNIX98/ctype.h/linknamespace = yes
|
test-xfail-UNIX98/ctype.h/linknamespace = yes
|
||||||
|
@ -7,6 +7,9 @@ libc_hidden_proto (__inet_aton)
|
|||||||
libc_hidden_proto (inet_aton)
|
libc_hidden_proto (inet_aton)
|
||||||
libc_hidden_proto (inet_ntop)
|
libc_hidden_proto (inet_ntop)
|
||||||
libc_hidden_proto (inet_pton)
|
libc_hidden_proto (inet_pton)
|
||||||
libc_hidden_proto (inet_makeaddr)
|
extern __typeof (inet_pton) __inet_pton;
|
||||||
|
libc_hidden_proto (__inet_pton)
|
||||||
|
extern __typeof (inet_makeaddr) __inet_makeaddr;
|
||||||
|
libc_hidden_proto (__inet_makeaddr)
|
||||||
libc_hidden_proto (inet_netof)
|
libc_hidden_proto (inet_netof)
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@ static char sccsid[] = "@(#)inet_makeaddr.c 8.1 (Berkeley) 6/4/93";
|
|||||||
* building addresses stored in the ifnet structure.
|
* building addresses stored in the ifnet structure.
|
||||||
*/
|
*/
|
||||||
struct in_addr
|
struct in_addr
|
||||||
inet_makeaddr(net, host)
|
__inet_makeaddr(net, host)
|
||||||
in_addr_t net, host;
|
in_addr_t net, host;
|
||||||
{
|
{
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
@ -56,4 +56,5 @@ inet_makeaddr(net, host)
|
|||||||
in.s_addr = htonl(in.s_addr);
|
in.s_addr = htonl(in.s_addr);
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
libc_hidden_def (inet_makeaddr)
|
libc_hidden_def (__inet_makeaddr)
|
||||||
|
weak_alias (__inet_makeaddr, inet_makeaddr)
|
||||||
|
@ -90,13 +90,14 @@ static const char rcsid[] = "$BINDId: inet_addr.c,v 8.11 1999/10/13 16:39:25 vix
|
|||||||
* The value returned is in network order.
|
* The value returned is in network order.
|
||||||
*/
|
*/
|
||||||
in_addr_t
|
in_addr_t
|
||||||
inet_addr(const char *cp) {
|
__inet_addr(const char *cp) {
|
||||||
struct in_addr val;
|
struct in_addr val;
|
||||||
|
|
||||||
if (__inet_aton(cp, &val))
|
if (__inet_aton(cp, &val))
|
||||||
return (val.s_addr);
|
return (val.s_addr);
|
||||||
return (INADDR_NONE);
|
return (INADDR_NONE);
|
||||||
}
|
}
|
||||||
|
weak_alias (__inet_addr, inet_addr)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check whether "cp" is a valid ascii representation
|
* Check whether "cp" is a valid ascii representation
|
||||||
|
@ -49,7 +49,7 @@ static int inet_pton6 (const char *src, u_char *dst) internal_function;
|
|||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
inet_pton(af, src, dst)
|
__inet_pton(af, src, dst)
|
||||||
int af;
|
int af;
|
||||||
const char *src;
|
const char *src;
|
||||||
void *dst;
|
void *dst;
|
||||||
@ -65,7 +65,9 @@ inet_pton(af, src, dst)
|
|||||||
}
|
}
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
libc_hidden_def (inet_pton)
|
libc_hidden_def (__inet_pton)
|
||||||
|
weak_alias (__inet_pton, inet_pton)
|
||||||
|
libc_hidden_weak (inet_pton)
|
||||||
|
|
||||||
/* int
|
/* int
|
||||||
* inet_pton4(src, dst)
|
* inet_pton4(src, dst)
|
||||||
|
@ -324,7 +324,7 @@ __res_vinit(res_state statp, int preinit) {
|
|||||||
if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL)
|
if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL)
|
||||||
*el = '\0';
|
*el = '\0';
|
||||||
if ((*cp != '\0') &&
|
if ((*cp != '\0') &&
|
||||||
(inet_pton(AF_INET6, cp, &a6) > 0)) {
|
(__inet_pton(AF_INET6, cp, &a6) > 0)) {
|
||||||
struct sockaddr_in6 *sa6;
|
struct sockaddr_in6 *sa6;
|
||||||
|
|
||||||
sa6 = malloc(sizeof(*sa6));
|
sa6 = malloc(sizeof(*sa6));
|
||||||
@ -428,7 +428,7 @@ __res_vinit(res_state statp, int preinit) {
|
|||||||
(void) fclose(fp);
|
(void) fclose(fp);
|
||||||
}
|
}
|
||||||
if (__builtin_expect(statp->nscount == 0, 0)) {
|
if (__builtin_expect(statp->nscount == 0, 0)) {
|
||||||
statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
|
statp->nsaddr.sin_addr = __inet_makeaddr(IN_LOOPBACKNET, 1);
|
||||||
statp->nsaddr.sin_family = AF_INET;
|
statp->nsaddr.sin_family = AF_INET;
|
||||||
statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
|
statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
|
||||||
statp->nscount = 1;
|
statp->nscount = 1;
|
||||||
|
Reference in New Issue
Block a user