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:
parent
2585d7b839
commit
1dbbb1ec7a
25
ChangeLog
25
ChangeLog
@ -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]
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -96,6 +96,7 @@ 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
|
||||||
{
|
{
|
||||||
@ -106,7 +107,8 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* 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)
|
||||||
|
@ -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. */
|
||||||
|
@ -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. */
|
||||||
|
@ -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. */
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user