aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-12-16 18:18:49 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-12-16 18:18:49 +0000
commit9a44d530c464d081e925b1c1af2b8bbe6e7b3207 (patch)
treea426306b1967ad948ba3a7351f87fa177aba019a /sysdeps/mach
parentd003ada20e8015df173c06f3292acacc7b148632 (diff)
downloadglibc-9a44d530c464d081e925b1c1af2b8bbe6e7b3207.zip
glibc-9a44d530c464d081e925b1c1af2b8bbe6e7b3207.tar.gz
glibc-9a44d530c464d081e925b1c1af2b8bbe6e7b3207.tar.bz2
Fix resolver if_* namespace (bug 17717).
Resolver code, brought in by pthreads (at least), uses if_* interfaces that weren't in POSIX before 2001, resulting in linknamespace failures. This patch changes those interfaces to be weak aliases of __if_* and makes the resolver use __if_* directly. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by this patch). [BZ #17717] * inet/if_index.c (if_nametoindex): Rename to __if_nametoindex and define as weak alias of __if_nametoindex. Use libc_hidden_weak. (if_indextoname): Rename to __if_indextoname and define as weak alias of __if_indextoname. Use libc_hidden_weak. (if_freenameindex): Rename to __if_freenameindex and define as weak alias of __if_freenameindex. (if_nameindex): Rename to __if_nameindex and define as weak alias of __if_nameindex. * sysdeps/mach/hurd/if_index.c (if_nametoindex): Rename to __if_nametoindex and define as weak alias of __if_nametoindex. Use libc_hidden_weak. (if_freenameindex): Rename to __if_freenameindex and define as weak alias of __if_freenameindex. (if_nameindex): Rename to __if_nameindex and define as weak alias of __if_nameindex. (if_indextoname): Rename to __if_indextoname and define as weak alias of __if_indextoname. Use libc_hidden_weak. * sysdeps/unix/sysv/linux/if_index.c (if_nametoindex): Rename to __if_nametoindex and define as weak alias of __if_nametoindex. Use libc_hidden_weak. (if_freenameindex): Rename to __if_freenameindex and define as weak alias of __if_freenameindex. Use libc_hidden_weak. (if_nameindex_netlink): Use __if_freenameindex instead of if_freenameindex. (if_nameindex): Rename to __if_nameindex and define as weak alias of __if_nameindex. Use libc_hidden_weak. (if_indextoname): Rename to __if_indextoname and define as weak alias of __if_indextoname. Use libc_hidden_weak. * include/net/if.h [!_ISOMAC] (__if_nametoindex): Declare and use libc_hidden_proto. [!_ISOMAC] (__if_freenameindex): Likewise. * resolv/res_init.c (__res_vinit): Use __if_nametoindex instead of if_nametoindex. * conform/Makefile (test-xfail-XPG4/grp.h/linknamespace): Remove variable. (test-xfail-XPG4/pwd.h/linknamespace): Likewise. (test-xfail-UNIX98/aio.h/linknamespace): Likewise. (test-xfail-UNIX98/grp.h/linknamespace): Likewise. (test-xfail-UNIX98/pthread.h/linknamespace): Likewise. (test-xfail-UNIX98/pwd.h/linknamespace): Likewise. (test-xfail-UNIX98/sched.h/linknamespace): Likewise. (test-xfail-UNIX98/time.h/linknamespace): Likewise.
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/hurd/if_index.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c
index 9d0ca62..11d2114 100644
--- a/sysdeps/mach/hurd/if_index.c
+++ b/sysdeps/mach/hurd/if_index.c
@@ -29,7 +29,7 @@
/* Return the interface index corresponding to interface IFNAME.
On error, return 0. */
unsigned int
-if_nametoindex (const char *ifname)
+__if_nametoindex (const char *ifname)
{
struct ifreq ifr;
int fd = __opensock ();
@@ -49,11 +49,13 @@ if_nametoindex (const char *ifname)
__close (fd);
return ifr.ifr_ifindex;
}
-libc_hidden_def (if_nametoindex)
+libc_hidden_def (__if_nametoindex)
+weak_alias (__if_nametoindex, if_nametoindex)
+libc_hidden_weak (if_nametoindex)
/* Free the structure IFN returned by if_nameindex. */
void
-if_freenameindex (struct if_nameindex *ifn)
+__if_freenameindex (struct if_nameindex *ifn)
{
struct if_nameindex *ptr = ifn;
while (ptr->if_name || ptr->if_index)
@@ -63,12 +65,13 @@ if_freenameindex (struct if_nameindex *ifn)
}
free (ifn);
}
+weak_alias (__if_freenameindex, if_freenameindex)
/* Return an array of if_nameindex structures, one for each network
interface present, plus one indicating the end of the array. On
error, return NULL. */
struct if_nameindex *
-if_nameindex (void)
+__if_nameindex (void)
{
error_t err = 0;
char data[2048];
@@ -148,12 +151,13 @@ if_nameindex (void)
__set_errno (err);
return idx;
}
+weak_alias (__if_nameindex, if_nameindex)
/* Store the name of the interface corresponding to index IFINDEX in
IFNAME (which has space for at least IFNAMSIZ characters). Return
IFNAME, or NULL on error. */
char *
-if_indextoname (unsigned int ifindex, char *ifname)
+__if_indextoname (unsigned int ifindex, char *ifname)
{
struct ifreq ifr;
int fd = __opensock ();
@@ -175,7 +179,8 @@ if_indextoname (unsigned int ifindex, char *ifname)
__close (fd);
return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
}
-libc_hidden_def (if_indextoname)
+weak_alias (__if_indextoname, if_indextoname)
+libc_hidden_weak (if_indextoname)
#if 0
void