]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix getifaddrs, freeifaddrs namespace (bug 17668).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 2 Dec 2014 23:11:09 +0000 (23:11 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 2 Dec 2014 23:11:09 +0000 (23:11 +0000)
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.

ChangeLog
NEWS
conform/Makefile
inet/ifaddrs.c
sysdeps/gnu/ifaddrs.c
sysdeps/unix/sysv/linux/ifaddrs.c

index f8e0e6cb7d65c58baa17e5e2105112b86ccbafcd..cbdc3a4dce25e4e7ec9657462a870572b49b2e24 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
diff --git a/NEWS b/NEWS
index 33ab071d3f99fd6d35183e48242b7787cc8cab81..581bc8b54c084bf112b469a3c212f0713872af67 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
index eed28430437a41cbcc11e3606143013e57e3a25d..8f07d87ca5a5ac799b63e577e2fcef44e79551ae 100644 (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
index 807160094935b14dd5b873609b6ee3f67a459b2f..bc273c63646ab81de0692f65e3265a948be35714 100644 (file)
    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)
index 1b8775f013aeffd7bc7f04349cd2914e1bd84d8a..3607b2c8bd76d29dbe103b9798c4dee5f9e71a05 100644 (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)
index a47b2edcad437b96c74952367dd7bb611b424b17..3f03f863e428593cc3048ce1318dfdea6a6ecff1 100644 (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)