If glibc is build with -O3 on at least 390 (-m31) or x86 (-m32),
gcc 11 dumps this warning:
svc_tcp.c: In function 'rendezvous_request':
svc_tcp.c:274:3: error: 'memcpy' offset [0, 15] is out of the bounds [0, 0] [-Werror=array-bounds]
274 | memcpy (&xprt->xp_raddr, &addr, sizeof (addr));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
In out-of-memory case, if one of the mallocs in makefd_xprt function
returns NULL, a message is dumped, makefd_xprt returns NULL
and the subsequent memcpy would copy to NULL.
Instead of a segfaulting, we delay a bit (see also __svc_accept_failed
and Bug 14889 (CVE-2011-4609) - svc_run() produces high cpu usage when
accept() fails with EMFILE (CVE-2011-4609).
The same applies to svc_unix.c.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
These functions should eventually have the same type, so it makes
sense to declare them together.
Tested-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Restore <rpc/netdb.h> as an installed header. Delete the dummy header
resolv/rpc/netdb.h because inet is not an optional glibc component
(so its <rpc/netdb.h> is always available).
Fixes commit acb527929d ("Move
non-deprecated RPC-related functions from sunrpc to inet") in
combination with commit 5500cdba40
("Remove --enable-obsolete-rpc configure flag").
this means that *always* libnsl is only built as shared library for
backward compatibility and the NSS modules libnss_nis and libnss_nisplus
are not built at all, libnsl's headers aren't installed.
This compatibility is kept only for architectures and ABIs that have
been added in or before version 2.28.
Replacement implementations based on TIRPC, which additionally support
IPv6, are available from <https://github.com/thkukuk/>.
This change does not affect libnss_compat which does not depended
on libnsl since 2.27 and thus can be used without NIS.
libnsl code depends on Sun RPC, e.g. on --enable-obsolete-rpc (installed
libnsl headers use installed Sun RPC headers), which will be removed in
the following commit.
It is generally not possible to add hidden aliases for global data
symbols: If the main executable contains a copy relocation against
the symbol, the hidden aliases keep pointing to the glibc-internal
copy of the symbol, instead of the symbol actually used by the
application.
Fixes commit 89aacb513e ("sunrpc:
Remove stray exports without --enable-obsolete-rpc [BZ #23166]").
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This is needed to avoid a warning when linking against libtirpc:
/lib64/libc.so.6: warning: common of `rpc_createerr@@TIRPC_0.3.0' overridden by definition
/usr/lib64/libtirpc.so: warning: defined here
This ld warning is not enabled by default; -Wl,--warn-common enables it.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Mark internal rpc functions with attribute_hidden to allow direct
access within libc.so and libc.a without using GOT nor PLT.
[BZ #18822]
* include/rpc/rpc.h (__rpc_thread_variables): Add
attribute_hidden.
(__rpc_thread_svc_cleanup): Likewise.
(__rpc_thread_clnt_cleanup): Likewise.
(__rpc_thread_key_cleanup): Likewise.
This adds a test to ensure that the problems fixed in the last several
patches do not recur. Each directory checks the headers that it
installs for two properties: first, each header must be compilable in
isolation, as both C and C++, under a representative combination of
language and library conformance levels; second, there is a blacklist
of identifiers that may not appear in any installed header, currently
consisting of the legacy BSD typedefs. (There is an exemption for the
headers that define those typedefs, and for the RPC headers. It may be
necessary to make this more sophisticated if we add more stuff to the
blacklist in the future.)
In order for this test to work correctly, every wrapper header
that actually defines something must guard those definitions with
#ifndef _ISOMAC. This is the existing mechanism used by the conform/
tests to tell wrapper headers not to define anything that the public
header wouldn't, and not to use anything from libc-symbols.h. conform/
only cares for headers that we need to check for standards conformance,
whereas this test applies to *every* header. (Headers in include/ that
are either installed directly, or are internal-use-only and do *not*
correspond to any installed header, are not affected.)
* scripts/check-installed-headers.sh: New script.
* Rules: In each directory that defines header files to be installed,
run check-installed-headers.sh on them as a special test.
* Makefile: Likewise for the headers installed at top level.
* include/aliases.h, include/alloca.h, include/argz.h
* include/arpa/nameser.h, include/arpa/nameser_compat.h
* include/elf.h, include/envz.h, include/err.h
* include/execinfo.h, include/fpu_control.h, include/getopt.h
* include/gshadow.h, include/ifaddrs.h, include/libintl.h
* include/link.h, include/malloc.h, include/mcheck.h
* include/mntent.h, include/netinet/ether.h
* include/nss.h, include/obstack.h, include/printf.h
* include/pty.h, include/resolv.h, include/rpc/auth.h
* include/rpc/auth_des.h, include/rpc/auth_unix.h
* include/rpc/clnt.h, include/rpc/des_crypt.h
* include/rpc/key_prot.h, include/rpc/netdb.h
* include/rpc/pmap_clnt.h, include/rpc/pmap_prot.h
* include/rpc/pmap_rmt.h, include/rpc/rpc.h
* include/rpc/rpc_msg.h, include/rpc/svc.h
* include/rpc/svc_auth.h, include/rpc/xdr.h
* include/rpcsvc/nis_callback.h, include/rpcsvc/nislib.h
* include/rpcsvc/yp.h, include/rpcsvc/ypclnt.h
* include/rpcsvc/ypupd.h, include/shadow.h
* include/stdio_ext.h, include/sys/epoll.h
* include/sys/file.h, include/sys/gmon.h, include/sys/ioctl.h
* include/sys/prctl.h, include/sys/profil.h
* include/sys/statfs.h, include/sys/sysctl.h
* include/sys/sysinfo.h, include/ttyent.h, include/utmp.h
* sysdeps/arm/nacl/include/bits/setjmp.h
* sysdeps/mips/include/sys/asm.h
* sysdeps/unix/sysv/linux/include/sys/sysinfo.h
* sysdeps/unix/sysv/linux/include/sys/timex.h
* sysdeps/x86/fpu/include/bits/fenv.h:
Add #ifndef _ISOMAC guard around internal declarations.
Add multiple-inclusion guard if not already present.
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/libc-tsd.h to plain libc-tsd.h to follow that
convention.
Tested for x86_64 (testing, and that installed stripped shared
libraries are unchanged by the patch).
[BZ #14912]
* bits/libc-tsd.h: Move to ...
* sysdeps/generic/libc-tsd.h: ...here.
(_GENERIC_BITS_LIBC_TSD_H): Rename macro to _GENERIC_LIBC_TSD_H.
* sysdeps/mach/hurd/bits/libc-tsd.h: Move to ...
* sysdeps/mach/hurd/libc-tsd.h: ...here.
(_BITS_LIBC_TSD_H): Rename macro to _LIBC_TSD_H.
* include/ctype.h: Include <libc-tsd.h> instead of
<bits/libc-tsd.h>.
* include/rpc/rpc.h: Likewise.
* locale/localeinfo.h: Likewise.
* sunrpc/rpc_thread.c: Likewise.
* sysdeps/mach/hurd/malloc-machine.h: Likewise.
* sysdeps/nptl/malloc-machine.h: Likewise.
__libc_clntudp_bufcreate_internal.
* include/sys/socket.h: Declare __have_sock_cloexec.
* socket/Makefile (aux): Add have_sock_cloexec.
* socket/have_sock_cloexec.c: New file.
* sunrpc/clnt_udp.h (clntudp_bufcreate): Now a wrapper around
__libc_clntudp_bufcreate.
(__libc_clntudp_bufcreate): Former implementation of clntudp_bufcreate
which takes an additional parameter. Create socket with non-blocking
mode and close-on-exec flag set, if wanted.
* sunrpc/Versions: Export __libc_clntudp_bufcreate@GLIBC_PRIVATE.
* nis/ypclnt.c (yp_bind_client_create): Use __libc_clntpudp_bufcreate
instead of clntudp_create. The socket has already the close-on-exec
flag set if SOCK_CLOEXEC is defined.
* nscd/nscd_initgroups.c: Mark __gr_map_handle as hidden.
* nscd/nscd_getgr_r.c: Likewise.
* include/rpc/pmap_rmt.h: Mark all functions as hidden.
* nscd/nscd_getai.c (__hst_map_handle): Mark as hidden.
* nscd/nscd_gethst_r.c (__hst_map_handle): Likewise.
* stdlib/longlong.h (__clz_tab): Mark as hidden.
* iconv/gconv_int.h: Mark __gconv_lock as hidden.
* include/rpc/auth.h: Mark xdr_des_block_internal and
xdr_opaque_auth_internal as hidden.
* sysdeps/unix/sysv/linux/getdents.c: Mark __have_no_getdents64 as
hidden.
* include/rpc/xdr.h: Make all _internal functions as hidden.
* sunrpc/pmap_rmt.c: Declare xdr_rmtcall_args_internal as hidden.
(pmap_getport): Use it to open a non-reserved socket to the portmapper
for TCP.
* include/rpc/pmap_clnt.h (__get_socket): Declare.
* sunrpc/pm_getmaps.c (pmap_getmaps): Use __get_socket to get an
non-reserved socket for the portmapper.
range to even lower ports.
2004-10-24 Ulrich Drepper <drepper@redhat.com>
* include/libc-symbols.h: Define hidden attribute macros for
libnss_files.
* include/netdb.h: Use libnss_files_hidden_proto for the parsers
defined in libnss_files, not libc_hidden_proto.
* include/netinet/ether.h: Likewise.
* include/rpc/netdb.h: Likewise.
* nss/nss_files/files-parse.c: Use hidden_def in parser definitions
instead of libc_hidden_def.
* nss/nss_files/files-netgrp.c: Add libnss_files_hidden_def to
_nss_netgroup_parseline definition.
2002-04-11 Zack Weinberg <zack@codesourcery.com>
* include/rpc/rpc.h (struct rpc_thread_variables): Remove
authnone_private_s.
* sunrpc/auth_none.c: Include bits/libc-lock.h.
Delete #ifdef _RPC_THREAD_SAFE_ block.
(authnone_private): Make a struct, not a pointer to struct.
(authnone_private_guard): New once-control variable.
(authnone_create_once): New function, split out of
authnone_create. No need to allocate memory.
(authnone_create): Just call authnone_create_once via
__libc_once, then return &authnone_private->no_client.
(authnone_marshal): Access private data via CLIENT argument,
not authnone_private pointer.
Fix typo (MAX_MARSHEL_SIZE -> MAX_MARSHAL_SIZE).
* sunrpc/rpc_thread.c (__rpc_thread_destroy): No need to free
authnone_private_s.
Add changes which were in this form in the original patch by
Eric Norum <eric.norum@usask.ca>.
* include/rpc/rpc.h: Remove svc_fdset, rpc_createerr, svc_pollfd, and
svc_max_pollfd.
* sunrpc/rpc/rpc.h: Declare __rpc_thread_svc_fdset,
__rpc_thread_createerr, __rpc_thread_svc_pollfd, and
__rpc_thread_svc_max_pollfd.
Define svc_fdset, get_rpc_createerr, svc_pollfd, and
svc_max_pollfd.
* sunrpc/rpc_thread.c: Handle first thread special, it uses the
global variables.
Define __rpc_thread_svc_fdset, __rpc_thread_createerr,
__rpc_thread_svc_pollfd, and __rpc_thread_svc_max_pollfd.
* sunrpc/Versions [libc] (GLIBC_2.2.3): Export __rpc_thread_svc_fdset,
__rpc_thread_createerr, __rpc_thread_svc_pollfd, and
__rpc_thread_svc_max_pollfd.
* sunrpc/clnt_gen.c: Replace use of rpc_createerr by call to
get_rpc_createerr.
* sunrpc/clnt_perr.c: Likewise.
* sunrpc/clnt_simp.c: Likewise.
* sunrpc/clnt_tcp.c: Likewise.
* sunrpc/clnt_udp.c: Likewise.
* sunrpc/clnt_unix.c: Likewise.
* sunrpc/pm_getport.c: Likewise.
* inet/ether_hton.c: Likewise
* inet/ether_ntoh.c: Likewise.
* nis/nss_nis/nis-ethers.c (_nss_nis_getntohost_r): Fix
declaration to match prototype.
* include/netinet/ether.h (struct etherent): Declare here so that
all implementations use the same struct.
* nis/nss_nis/nis-ethers.c: Include netinet/ether.h to get
prototypes.
(struct ether): Removed.
Use struct etherent instead of ether everywhere.
* include/rpc/auth.h (DECLARE_NSS_PROTOTYPES): New.
* include/rpc/auth_des.h (DECLARE_NSS_PROTOTYPES): New.
* sunrpc/publickey.c: Include auth_des.h for prototypes.