Fix getifaddrs, freeifaddrs namespace (bug 17668).

Various objects in glibc bring in ifaddrs.o (via references to
__netlink_*) and thereby getifaddrs and freeifaddrs, which are not
part of any standard supported by glibc.  These should be weak aliases
of __getifaddrs and __freeifaddrs; this patch makes them so.

(The path by which these functions are brought in is Linux-specific,
but it seems less confusing to make all versions of these functions
weak aliases rather than only the Linux-specific versions that
definitely need it.)

Tested for x86_64 (testsuite, and that disassembly of installed shared
libraries is unchanged by this patch).

	[BZ #17668]
	* inet/ifaddrs.c (getifaddrs): Rename to __getifaddrs and define
	as weak alias of __getifaddrs.  Use libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* sysdeps/gnu/ifaddrs.c (getifaddrs): Rename to __getifaddrs and
	define as weak alias of __getifaddrs.  Use libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs): Rename to
	__getifaddrs and define as weak alias of __getifaddrs.  Use
	libc_hidden_weak.
	(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
	__freeifaddrs.  Use libc_hidden_weak.
	* conform/Makefile (test-xfail-XOPEN2K/net/if.h/linknamespace):
	Remove variable.
	(test-xfail-POSIX2008/net/if.h/linknamespace): Likewise.
	(test-xfail-XOPEN2K8/net/if.h/linknamespace): Likewise.
This commit is contained in:
Joseph Myers 2014-12-02 23:11:09 +00:00
parent bbe4c142b0
commit 7f994279e9
6 changed files with 40 additions and 16 deletions

View File

@ -1,3 +1,24 @@
2014-12-02 Joseph Myers <joseph@codesourcery.com>
[BZ #17668]
* inet/ifaddrs.c (getifaddrs): Rename to __getifaddrs and define
as weak alias of __getifaddrs. Use libc_hidden_weak.
(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
__freeifaddrs. Use libc_hidden_weak.
* sysdeps/gnu/ifaddrs.c (getifaddrs): Rename to __getifaddrs and
define as weak alias of __getifaddrs. Use libc_hidden_weak.
(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
__freeifaddrs. Use libc_hidden_weak.
* sysdeps/unix/sysv/linux/ifaddrs.c (getifaddrs): Rename to
__getifaddrs and define as weak alias of __getifaddrs. Use
libc_hidden_weak.
(freeifaddrs): Rename to __freeifaddrs and define as weak alias of
__freeifaddrs. Use libc_hidden_weak.
* conform/Makefile (test-xfail-XOPEN2K/net/if.h/linknamespace):
Remove variable.
(test-xfail-POSIX2008/net/if.h/linknamespace): Likewise.
(test-xfail-XOPEN2K8/net/if.h/linknamespace): Likewise.
2014-12-02 Petar Jovanovic <petar.jovanovic@rt-rk.com>
[BZ #17601]

2
NEWS
View File

@ -13,7 +13,7 @@ Version 2.21
16619, 16740, 16857, 17192, 17266, 17344, 17363, 17370, 17371, 17411,
17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571,
17572, 17573, 17574, 17581, 17582, 17583, 17584, 17585, 17589, 17594,
17601, 17608, 17616, 17625, 17633, 17664, 17665.
17601, 17608, 17616, 17625, 17633, 17664, 17665, 17668.
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
under certain input conditions resulting in the execution of a shell for

View File

@ -414,7 +414,6 @@ test-xfail-XOPEN2K/glob.h/linknamespace = yes
test-xfail-XOPEN2K/grp.h/linknamespace = yes
test-xfail-XOPEN2K/libgen.h/linknamespace = yes
test-xfail-XOPEN2K/mqueue.h/linknamespace = yes
test-xfail-XOPEN2K/net/if.h/linknamespace = yes
test-xfail-XOPEN2K/netdb.h/linknamespace = yes
test-xfail-XOPEN2K/pthread.h/linknamespace = yes
test-xfail-XOPEN2K/pwd.h/linknamespace = yes
@ -436,7 +435,6 @@ test-xfail-POSIX2008/dirent.h/linknamespace = yes
test-xfail-POSIX2008/fcntl.h/linknamespace = yes
test-xfail-POSIX2008/grp.h/linknamespace = yes
test-xfail-POSIX2008/mqueue.h/linknamespace = yes
test-xfail-POSIX2008/net/if.h/linknamespace = yes
test-xfail-POSIX2008/netdb.h/linknamespace = yes
test-xfail-POSIX2008/pthread.h/linknamespace = yes
test-xfail-POSIX2008/regex.h/linknamespace = yes
@ -451,7 +449,6 @@ test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes
test-xfail-XOPEN2K8/grp.h/linknamespace = yes
test-xfail-XOPEN2K8/libgen.h/linknamespace = yes
test-xfail-XOPEN2K8/mqueue.h/linknamespace = yes
test-xfail-XOPEN2K8/net/if.h/linknamespace = yes
test-xfail-XOPEN2K8/netdb.h/linknamespace = yes
test-xfail-XOPEN2K8/pthread.h/linknamespace = yes
test-xfail-XOPEN2K8/pwd.h/linknamespace = yes

View File

@ -24,16 +24,17 @@
network interface on the host machine. If successful, store the
list in *IFAP and return 0. On errors, return -1 and set `errno'. */
int
getifaddrs (struct ifaddrs **ifap)
__getifaddrs (struct ifaddrs **ifap)
{
__set_errno (ENOSYS);
return -1;
}
libc_hidden_def (getifaddrs)
weak_alias (__getifaddrs, getifaddrs)
libc_hidden_weak (getifaddrs)
stub_warning (getifaddrs)
void
freeifaddrs (struct ifaddrs *ifa)
__freeifaddrs (struct ifaddrs *ifa)
{
if (ifa == NULL)
return; /* a la free, why not? */
@ -41,5 +42,6 @@ freeifaddrs (struct ifaddrs *ifa)
/* Can't be called properly if getifaddrs never succeeded. */
abort ();
}
libc_hidden_def (freeifaddrs)
weak_alias (__freeifaddrs, freeifaddrs)
libc_hidden_weak (freeifaddrs)
stub_warning (freeifaddrs)

View File

@ -32,7 +32,7 @@
network interface on the host machine. If successful, store the
list in *IFAP and return 0. On errors, return -1 and set `errno'. */
int
getifaddrs (struct ifaddrs **ifap)
__getifaddrs (struct ifaddrs **ifap)
{
/* This implementation handles only IPv4 interfaces.
The various ioctls below will only work on an AF_INET socket.
@ -150,13 +150,15 @@ getifaddrs (struct ifaddrs **ifap)
return 0;
}
weak_alias (__getifaddrs, getifaddrs)
#ifndef getifaddrs
libc_hidden_def (getifaddrs)
libc_hidden_weak (getifaddrs)
#endif
void
freeifaddrs (struct ifaddrs *ifa)
__freeifaddrs (struct ifaddrs *ifa)
{
free (ifa);
}
libc_hidden_def (freeifaddrs)
weak_alias (__freeifaddrs, freeifaddrs)
libc_hidden_weak (freeifaddrs)

View File

@ -819,7 +819,7 @@ getifaddrs_internal (struct ifaddrs **ifap)
network interface on the host machine. If successful, store the
list in *IFAP and return 0. On errors, return -1 and set `errno'. */
int
getifaddrs (struct ifaddrs **ifap)
__getifaddrs (struct ifaddrs **ifap)
{
int res;
@ -829,12 +829,14 @@ getifaddrs (struct ifaddrs **ifap)
return res;
}
libc_hidden_def (getifaddrs)
weak_alias (__getifaddrs, getifaddrs)
libc_hidden_weak (getifaddrs)
void
freeifaddrs (struct ifaddrs *ifa)
__freeifaddrs (struct ifaddrs *ifa)
{
free (ifa);
}
libc_hidden_def (freeifaddrs)
weak_alias (__freeifaddrs, freeifaddrs)
libc_hidden_weak (freeifaddrs)