1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

elf: remove redundant is_path argument

is_path argument is no longer used and could be safely removed.

* elf/dl-dst.h (DL_DST_COUNT): Remove is_path argument, all callers
updated.
* elf/dl-load.c (is_dst, _dl_dst_count, _dl_dst_substitute,
expand_dynamic_string_token): Likewise.
* sysdeps/generic/ldsodefs.h (_dl_dst_count, _dl_dst_substitute): Remove
is_path argument.
This commit is contained in:
Dmitry V. Levin
2017-12-20 11:27:51 +00:00
parent 1c36e1e6a5
commit 2bd86632b7
5 changed files with 27 additions and 24 deletions

View File

@ -1,5 +1,12 @@
2017-12-27 Dmitry V. Levin <ldv@altlinux.org> 2017-12-27 Dmitry V. Levin <ldv@altlinux.org>
* elf/dl-dst.h (DL_DST_COUNT): Remove is_path argument, all callers
updated.
* elf/dl-load.c (is_dst, _dl_dst_count, _dl_dst_substitute,
expand_dynamic_string_token): Likewise.
* sysdeps/generic/ldsodefs.h (_dl_dst_count, _dl_dst_substitute): Remove
is_path argument.
* elf/dl-load.c (is_dst): Remove checks that is_path is set and name * elf/dl-load.c (is_dst): Remove checks that is_path is set and name
contains ':'. contains ':'.

View File

@ -100,7 +100,7 @@ struct list
({ \ ({ \
const char *__str = (str); \ const char *__str = (str); \
const char *__result = __str; \ const char *__result = __str; \
size_t __dst_cnt = DL_DST_COUNT (__str, 0); \ size_t __dst_cnt = DL_DST_COUNT (__str); \
\ \
if (__dst_cnt != 0) \ if (__dst_cnt != 0) \
{ \ { \
@ -114,7 +114,7 @@ DST not allowed in SUID/SGID programs")); \
__newp = (char *) alloca (DL_DST_REQUIRED (l, __str, strlen (__str), \ __newp = (char *) alloca (DL_DST_REQUIRED (l, __str, strlen (__str), \
__dst_cnt)); \ __dst_cnt)); \
\ \
__result = _dl_dst_substitute (l, __str, __newp, 0); \ __result = _dl_dst_substitute (l, __str, __newp); \
\ \
if (*__result == '\0') \ if (*__result == '\0') \
{ \ { \

View File

@ -20,13 +20,13 @@
/* Determine the number of DST elements in the name. Only if IS_PATH is /* Determine the number of DST elements in the name. Only if IS_PATH is
nonzero paths are recognized (i.e., multiple, ':' separated filenames). */ nonzero paths are recognized (i.e., multiple, ':' separated filenames). */
#define DL_DST_COUNT(name, is_path) \ #define DL_DST_COUNT(name) \
({ \ ({ \
size_t __cnt = 0; \ size_t __cnt = 0; \
const char *__sf = strchr (name, '$'); \ const char *__sf = strchr (name, '$'); \
\ \
if (__glibc_unlikely (__sf != NULL)) \ if (__glibc_unlikely (__sf != NULL)) \
__cnt = _dl_dst_count (__sf, is_path); \ __cnt = _dl_dst_count (__sf); \
\ \
__cnt; }) __cnt; })

View File

@ -180,8 +180,7 @@ is_trusted_path_normalize (const char *path, size_t len)
static size_t static size_t
is_dst (const char *start, const char *name, const char *str, is_dst (const char *start, const char *name, const char *str, int secure)
int is_path, int secure)
{ {
size_t len; size_t len;
bool is_curly = false; bool is_curly = false;
@ -219,7 +218,7 @@ is_dst (const char *start, const char *name, const char *str,
size_t size_t
_dl_dst_count (const char *name, int is_path) _dl_dst_count (const char *name)
{ {
const char *const start = name; const char *const start = name;
size_t cnt = 0; size_t cnt = 0;
@ -231,10 +230,9 @@ _dl_dst_count (const char *name, int is_path)
/* $ORIGIN is not expanded for SUID/GUID programs (except if it /* $ORIGIN is not expanded for SUID/GUID programs (except if it
is $ORIGIN alone) and it must always appear first in path. */ is $ORIGIN alone) and it must always appear first in path. */
++name; ++name;
if ((len = is_dst (start, name, "ORIGIN", is_path, if ((len = is_dst (start, name, "ORIGIN", __libc_enable_secure)) != 0
__libc_enable_secure)) != 0 || (len = is_dst (start, name, "PLATFORM", 0)) != 0
|| (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0 || (len = is_dst (start, name, "LIB", 0)) != 0)
|| (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
++cnt; ++cnt;
name = strchr (name + len, '$'); name = strchr (name + len, '$');
@ -246,8 +244,7 @@ _dl_dst_count (const char *name, int is_path)
char * char *
_dl_dst_substitute (struct link_map *l, const char *name, char *result, _dl_dst_substitute (struct link_map *l, const char *name, char *result)
int is_path)
{ {
const char *const start = name; const char *const start = name;
@ -267,16 +264,15 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
size_t len; size_t len;
++name; ++name;
if ((len = is_dst (start, name, "ORIGIN", is_path, if ((len = is_dst (start, name, "ORIGIN", __libc_enable_secure)) != 0)
__libc_enable_secure)) != 0)
{ {
repl = l->l_origin; repl = l->l_origin;
check_for_trusted = (__libc_enable_secure check_for_trusted = (__libc_enable_secure
&& l->l_type == lt_executable); && l->l_type == lt_executable);
} }
else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0) else if ((len = is_dst (start, name, "PLATFORM", 0)) != 0)
repl = GLRO(dl_platform); repl = GLRO(dl_platform);
else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0) else if ((len = is_dst (start, name, "LIB", 0)) != 0)
repl = DL_DST_LIB; repl = DL_DST_LIB;
if (repl != NULL && repl != (const char *) -1) if (repl != NULL && repl != (const char *) -1)
@ -320,7 +316,7 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
belonging to the map is loaded. In this case the path element belonging to the map is loaded. In this case the path element
containing $ORIGIN is left out. */ containing $ORIGIN is left out. */
static char * static char *
expand_dynamic_string_token (struct link_map *l, const char *s, int is_path) expand_dynamic_string_token (struct link_map *l, const char *s)
{ {
/* We make two runs over the string. First we determine how large the /* We make two runs over the string. First we determine how large the
resulting string is and then we copy it over. Since this is no resulting string is and then we copy it over. Since this is no
@ -331,7 +327,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s, int is_path)
char *result; char *result;
/* Determine the number of DST elements. */ /* Determine the number of DST elements. */
cnt = DL_DST_COUNT (s, is_path); cnt = DL_DST_COUNT (s);
/* If we do not have to replace anything simply copy the string. */ /* If we do not have to replace anything simply copy the string. */
if (__glibc_likely (cnt == 0)) if (__glibc_likely (cnt == 0))
@ -345,7 +341,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s, int is_path)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
return _dl_dst_substitute (l, s, result, is_path); return _dl_dst_substitute (l, s, result);
} }
@ -399,7 +395,7 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep,
{ {
struct r_search_path_elem *dirp; struct r_search_path_elem *dirp;
to_free = cp = expand_dynamic_string_token (l, cp, 1); to_free = cp = expand_dynamic_string_token (l, cp);
size_t len = strlen (cp); size_t len = strlen (cp);
@ -2070,7 +2066,7 @@ _dl_map_object (struct link_map *loader, const char *name,
{ {
/* The path may contain dynamic string tokens. */ /* The path may contain dynamic string tokens. */
realname = (loader realname = (loader
? expand_dynamic_string_token (loader, name, 0) ? expand_dynamic_string_token (loader, name)
: __strdup (name)); : __strdup (name));
if (realname == NULL) if (realname == NULL)
fd = -1; fd = -1;

View File

@ -1096,11 +1096,11 @@ extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden;
extern const char *_dl_get_origin (void) attribute_hidden; extern const char *_dl_get_origin (void) attribute_hidden;
/* Count DSTs. */ /* Count DSTs. */
extern size_t _dl_dst_count (const char *name, int is_path) attribute_hidden; extern size_t _dl_dst_count (const char *name) attribute_hidden;
/* Substitute DST values. */ /* Substitute DST values. */
extern char *_dl_dst_substitute (struct link_map *l, const char *name, extern char *_dl_dst_substitute (struct link_map *l, const char *name,
char *result, int is_path) attribute_hidden; char *result) attribute_hidden;
/* Check validity of the caller. */ /* Check validity of the caller. */
extern int _dl_check_caller (const void *caller, enum allowmask mask) extern int _dl_check_caller (const void *caller, enum allowmask mask)