1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-05-30 04:04:54 +03:00

Mark internal nss symbols with attribute_hidden [BZ #18822]

Mark internal nss symbols with attribute_hidden to allow direct access
within libc.so and libc.a without using GOT nor PLT.

Tested on x86-64 with and without --disable-nscd.

	[BZ #18822]
	* grp/initgroups.c (__nss_group_database): Removed.
	(__nss_initgroups_database): Likewise.
	* nscd/gai.c (__nss_hosts_database): Likewise.
	* nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise.
	* posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise.
	* posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise.
	* posix/tst-rfc3484.c (__nss_hosts_database): Likewise.
	* sysdeps/posix/getaddrinfo.c (__nss_hosts_database): Likewise.
	* nss/getXXent.c (INTERNAL (REENTRANT_GETNAME)): Add
	attribute_hidden.
	* nss/nsswitch.c (__nss_database_custom): Define only if
	USE_NSCD is defined.
	(__nss_configure_lookup): Use __nss_database_custom only if
	USE_NSCD is defined.
	* nss/nsswitch.h (__nss_database_custom): Declare only if
	USE_NSCD is defined.  Add attribute_hidden.
	(__nss_setent): Add attribute_hidden.
	(__nss_endent): Likewise.
	(__nss_getent_r): Likewise.
	(__nss_getent): Likewise.
	(DEFINE_DATABASE): Declare __nss_##arg##_database.
This commit is contained in:
H.J. Lu 2017-08-21 05:31:02 -07:00
parent 2585d7b839
commit 1dbbb1ec7a
11 changed files with 45 additions and 23 deletions

View File

@ -1,3 +1,28 @@
2017-08-21 H.J. Lu <hongjiu.lu@intel.com>
[BZ #18822]
* grp/initgroups.c (__nss_group_database): Removed.
(__nss_initgroups_database): Likewise.
* nscd/gai.c (__nss_hosts_database): Likewise.
* nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise.
* posix/tst-rfc3484-2.c (__nss_hosts_database): Likewise.
* posix/tst-rfc3484-3.c (__nss_hosts_database): Likewise.
* posix/tst-rfc3484.c (__nss_hosts_database): Likewise.
* sysdeps/posix/getaddrinfo.c (__nss_hosts_database): Likewise.
* nss/getXXent.c (INTERNAL (REENTRANT_GETNAME)): Add
attribute_hidden.
* nss/nsswitch.c (__nss_database_custom): Define only if
USE_NSCD is defined.
(__nss_configure_lookup): Use __nss_database_custom only if
USE_NSCD is defined.
* nss/nsswitch.h (__nss_database_custom): Declare only if
USE_NSCD is defined. Add attribute_hidden.
(__nss_setent): Add attribute_hidden.
(__nss_endent): Likewise.
(__nss_getent_r): Likewise.
(__nss_getent): Likewise.
(DEFINE_DATABASE): Declare __nss_##arg##_database.
2017-08-20 H.J. Lu <hongjiu.lu@intel.com> 2017-08-20 H.J. Lu <hongjiu.lu@intel.com>
[BZ #18822] [BZ #18822]

View File

@ -36,8 +36,6 @@ typedef enum nss_status (*initgroups_dyn_function) (const char *, gid_t,
long int *, long int *, long int *, long int *,
gid_t **, long int, int *); gid_t **, long int, int *);
extern service_user *__nss_group_database attribute_hidden;
service_user *__nss_initgroups_database;
static bool use_initgroups_entry; static bool use_initgroups_entry;

View File

@ -43,6 +43,3 @@
#ifdef HAVE_LIBIDN #ifdef HAVE_LIBIDN
# include <libidn/idn-stub.c> # include <libidn/idn-stub.c>
#endif #endif
/* Some variables normally defined in libc. */
service_user *__nss_hosts_database;

View File

@ -52,8 +52,6 @@
#define DEFAULT_CONFIG NULL #define DEFAULT_CONFIG NULL
#endif #endif
service_user *DATABASE_NAME_SYMBOL attribute_hidden;
int int
DB_LOOKUP_FCT (service_user **ni, const char *fct_name, const char *fct2_name, DB_LOOKUP_FCT (service_user **ni, const char *fct_name, const char *fct2_name,
void **fctp) void **fctp)

View File

@ -56,7 +56,7 @@
/* Prototype of the reentrant version. */ /* Prototype of the reentrant version. */
extern int INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, extern int INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer,
size_t buflen, LOOKUP_TYPE **result size_t buflen, LOOKUP_TYPE **result
H_ERRNO_PARM); H_ERRNO_PARM) attribute_hidden;
/* We need to protect the dynamic buffer handling. */ /* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock); __libc_lock_define_initialized (static, lock);

View File

@ -73,8 +73,10 @@ static const struct
}; };
#define ndatabases (sizeof (databases) / sizeof (databases[0])) #define ndatabases (sizeof (databases) / sizeof (databases[0]))
#ifdef USE_NSCD
/* Flags whether custom rules for database is set. */ /* Flags whether custom rules for database is set. */
bool __nss_database_custom[NSS_DBSIDX_max]; bool __nss_database_custom[NSS_DBSIDX_max];
#endif
__libc_lock_define_initialized (static, lock) __libc_lock_define_initialized (static, lock)
@ -304,7 +306,9 @@ __nss_configure_lookup (const char *dbname, const char *service_line)
/* Install new rules. */ /* Install new rules. */
*databases[cnt].dbp = new_db; *databases[cnt].dbp = new_db;
#ifdef USE_NSCD
__nss_database_custom[cnt] = true; __nss_database_custom[cnt] = true;
#endif
__libc_lock_unlock (lock); __libc_lock_unlock (lock);

View File

@ -96,17 +96,19 @@ typedef struct name_database
} name_database; } name_database;
#ifdef USE_NSCD
/* Indices into DATABASES in nsswitch.c and __NSS_DATABASE_CUSTOM. */ /* Indices into DATABASES in nsswitch.c and __NSS_DATABASE_CUSTOM. */
enum enum
{ {
#define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg, # define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg,
#include "databases.def" # include "databases.def"
#undef DEFINE_DATABASE # undef DEFINE_DATABASE
NSS_DBSIDX_max NSS_DBSIDX_max
}; };
/* Flags whether custom rules for database is set. */ /* Flags whether custom rules for database is set. */
extern bool __nss_database_custom[NSS_DBSIDX_max]; extern bool __nss_database_custom[NSS_DBSIDX_max] attribute_hidden;
#endif
/* Warning for NSS functions, which don't require dlopen if glibc /* Warning for NSS functions, which don't require dlopen if glibc
was built with --enable-static-nss. */ was built with --enable-static-nss. */
@ -180,11 +182,13 @@ extern void __nss_setent (const char *func_name,
db_lookup_function lookup_fct, db_lookup_function lookup_fct,
service_user **nip, service_user **startp, service_user **nip, service_user **startp,
service_user **last_nip, int stayon, service_user **last_nip, int stayon,
int *stayon_tmp, int res); int *stayon_tmp, int res)
attribute_hidden;
extern void __nss_endent (const char *func_name, extern void __nss_endent (const char *func_name,
db_lookup_function lookup_fct, db_lookup_function lookup_fct,
service_user **nip, service_user **startp, service_user **nip, service_user **startp,
service_user **last_nip, int res); service_user **last_nip, int res)
attribute_hidden;
extern int __nss_getent_r (const char *getent_func_name, extern int __nss_getent_r (const char *getent_func_name,
const char *setent_func_name, const char *setent_func_name,
db_lookup_function lookup_fct, db_lookup_function lookup_fct,
@ -192,10 +196,12 @@ extern int __nss_getent_r (const char *getent_func_name,
service_user **last_nip, int *stayon_tmp, service_user **last_nip, int *stayon_tmp,
int res, int res,
void *resbuf, char *buffer, size_t buflen, void *resbuf, char *buffer, size_t buflen,
void **result, int *h_errnop); void **result, int *h_errnop)
attribute_hidden;
extern void *__nss_getent (getent_r_function func, extern void *__nss_getent (getent_r_function func,
void **resbuf, char **buffer, size_t buflen, void **resbuf, char **buffer, size_t buflen,
size_t *buffer_size, int *h_errnop); size_t *buffer_size, int *h_errnop)
attribute_hidden;
struct resolv_context; struct resolv_context;
struct hostent; struct hostent;
extern int __nss_hostname_digits_dots_context (struct resolv_context *, extern int __nss_hostname_digits_dots_context (struct resolv_context *,
@ -221,6 +227,7 @@ libc_hidden_proto (__nss_hostname_digits_dots)
/* Prototypes for __nss_*_lookup2 functions. */ /* Prototypes for __nss_*_lookup2 functions. */
#define DEFINE_DATABASE(arg) \ #define DEFINE_DATABASE(arg) \
service_user *__nss_##arg##_database attribute_hidden; \
int __nss_##arg##_lookup2 (service_user **, const char *, \ int __nss_##arg##_lookup2 (service_user **, const char *, \
const char *, void **); \ const char *, void **); \
libc_hidden_proto (__nss_##arg##_lookup2) libc_hidden_proto (__nss_##arg##_lookup2)

View File

@ -58,8 +58,6 @@ _res_hconf_init (void)
#undef USE_NSCD #undef USE_NSCD
#include "../sysdeps/posix/getaddrinfo.c" #include "../sysdeps/posix/getaddrinfo.c"
service_user *__nss_hosts_database attribute_hidden;
/* This is the beginning of the real test code. The above defines /* This is the beginning of the real test code. The above defines
(among other things) the function rfc3484_sort. */ (among other things) the function rfc3484_sort. */

View File

@ -58,8 +58,6 @@ _res_hconf_init (void)
#undef USE_NSCD #undef USE_NSCD
#include "../sysdeps/posix/getaddrinfo.c" #include "../sysdeps/posix/getaddrinfo.c"
service_user *__nss_hosts_database attribute_hidden;
/* This is the beginning of the real test code. The above defines /* This is the beginning of the real test code. The above defines
(among other things) the function rfc3484_sort. */ (among other things) the function rfc3484_sort. */

View File

@ -58,8 +58,6 @@ _res_hconf_init (void)
#undef USE_NSCD #undef USE_NSCD
#include "../sysdeps/posix/getaddrinfo.c" #include "../sysdeps/posix/getaddrinfo.c"
service_user *__nss_hosts_database attribute_hidden;
/* This is the beginning of the real test code. The above defines /* This is the beginning of the real test code. The above defines
(among other things) the function rfc3484_sort. */ (among other things) the function rfc3484_sort. */

View File

@ -318,7 +318,6 @@ typedef enum nss_status (*nss_gethostbyname3_r)
typedef enum nss_status (*nss_getcanonname_r) typedef enum nss_status (*nss_getcanonname_r)
(const char *name, char *buffer, size_t buflen, char **result, (const char *name, char *buffer, size_t buflen, char **result,
int *errnop, int *h_errnop); int *errnop, int *h_errnop);
extern service_user *__nss_hosts_database attribute_hidden;
/* This function is called if a canonical name is requested, but if /* This function is called if a canonical name is requested, but if
the service function did not provide it. It tries to obtain the the service function did not provide it. It tries to obtain the