mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
Use uintptr_t instead of performing pointer subtraction with a null pointer
Signed-off-by: Qihao Chencao <twose@qq.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
dab6344279
commit
cc4d6614b5
12 changed files with 35 additions and 36 deletions
|
@ -110,7 +110,7 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
salt_len = MIN (strcspn (salt, "$"), 8);
|
salt_len = MIN (strcspn (salt, "$"), 8);
|
||||||
key_len = strlen (key);
|
key_len = strlen (key);
|
||||||
|
|
||||||
if ((key - (char *) 0) % __alignof__ (md5_uint32) != 0)
|
if (((uintptr_t) key) % __alignof__ (md5_uint32) != 0)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
|
@ -125,19 +125,19 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
|
|
||||||
key = copied_key =
|
key = copied_key =
|
||||||
memcpy (tmp + __alignof__ (md5_uint32)
|
memcpy (tmp + __alignof__ (md5_uint32)
|
||||||
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
|
- ((uintptr_t) tmp) % __alignof__ (md5_uint32),
|
||||||
key, key_len);
|
key, key_len);
|
||||||
assert ((key - (char *) 0) % __alignof__ (md5_uint32) == 0);
|
assert (((uintptr_t) key) % __alignof__ (md5_uint32) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((salt - (char *) 0) % __alignof__ (md5_uint32) != 0)
|
if (((uintptr_t) salt) % __alignof__ (md5_uint32) != 0)
|
||||||
{
|
{
|
||||||
char *tmp = (char *) alloca (salt_len + __alignof__ (md5_uint32));
|
char *tmp = (char *) alloca (salt_len + __alignof__ (md5_uint32));
|
||||||
salt = copied_salt =
|
salt = copied_salt =
|
||||||
memcpy (tmp + __alignof__ (md5_uint32)
|
memcpy (tmp + __alignof__ (md5_uint32)
|
||||||
- (tmp - (char *) 0) % __alignof__ (md5_uint32),
|
- ((uintptr_t) tmp) % __alignof__ (md5_uint32),
|
||||||
salt, salt_len);
|
salt, salt_len);
|
||||||
assert ((salt - (char *) 0) % __alignof__ (md5_uint32) == 0);
|
assert (((uintptr_t) salt) % __alignof__ (md5_uint32) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NSS
|
#ifdef USE_NSS
|
||||||
|
|
|
@ -142,7 +142,7 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
|
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
|
||||||
key_len = strlen (key);
|
key_len = strlen (key);
|
||||||
|
|
||||||
if ((key - (char *) 0) % __alignof__ (uint32_t) != 0)
|
if (((uintptr_t) key) % __alignof__ (uint32_t) != 0)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
|
@ -157,20 +157,20 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
|
|
||||||
key = copied_key =
|
key = copied_key =
|
||||||
memcpy (tmp + __alignof__ (uint32_t)
|
memcpy (tmp + __alignof__ (uint32_t)
|
||||||
- (tmp - (char *) 0) % __alignof__ (uint32_t),
|
- ((uintptr_t) tmp) % __alignof__ (uint32_t),
|
||||||
key, key_len);
|
key, key_len);
|
||||||
assert ((key - (char *) 0) % __alignof__ (uint32_t) == 0);
|
assert (((uintptr_t) key) % __alignof__ (uint32_t) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0)
|
if (((uintptr_t) salt) % __alignof__ (uint32_t) != 0)
|
||||||
{
|
{
|
||||||
char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t));
|
char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t));
|
||||||
alloca_used += salt_len + __alignof__ (uint32_t);
|
alloca_used += salt_len + __alignof__ (uint32_t);
|
||||||
salt = copied_salt =
|
salt = copied_salt =
|
||||||
memcpy (tmp + __alignof__ (uint32_t)
|
memcpy (tmp + __alignof__ (uint32_t)
|
||||||
- (tmp - (char *) 0) % __alignof__ (uint32_t),
|
- ((uintptr_t) tmp) % __alignof__ (uint32_t),
|
||||||
salt, salt_len);
|
salt, salt_len);
|
||||||
assert ((salt - (char *) 0) % __alignof__ (uint32_t) == 0);
|
assert (((uintptr_t) salt) % __alignof__ (uint32_t) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NSS
|
#ifdef USE_NSS
|
||||||
|
|
|
@ -142,7 +142,7 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
|
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
|
||||||
key_len = strlen (key);
|
key_len = strlen (key);
|
||||||
|
|
||||||
if ((key - (char *) 0) % __alignof__ (uint64_t) != 0)
|
if (((uintptr_t) key) % __alignof__ (uint64_t) != 0)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
|
@ -157,19 +157,19 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
|
||||||
|
|
||||||
key = copied_key =
|
key = copied_key =
|
||||||
memcpy (tmp + __alignof__ (uint64_t)
|
memcpy (tmp + __alignof__ (uint64_t)
|
||||||
- (tmp - (char *) 0) % __alignof__ (uint64_t),
|
- ((uintptr_t) tmp) % __alignof__ (uint64_t),
|
||||||
key, key_len);
|
key, key_len);
|
||||||
assert ((key - (char *) 0) % __alignof__ (uint64_t) == 0);
|
assert (((uintptr_t) key) % __alignof__ (uint64_t) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0)
|
if (((uintptr_t) salt) % __alignof__ (uint64_t) != 0)
|
||||||
{
|
{
|
||||||
char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t));
|
char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t));
|
||||||
salt = copied_salt =
|
salt = copied_salt =
|
||||||
memcpy (tmp + __alignof__ (uint64_t)
|
memcpy (tmp + __alignof__ (uint64_t)
|
||||||
- (tmp - (char *) 0) % __alignof__ (uint64_t),
|
- ((uintptr_t) tmp) % __alignof__ (uint64_t),
|
||||||
salt, salt_len);
|
salt, salt_len);
|
||||||
assert ((salt - (char *) 0) % __alignof__ (uint64_t) == 0);
|
assert (((uintptr_t) salt) % __alignof__ (uint64_t) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NSS
|
#ifdef USE_NSS
|
||||||
|
|
|
@ -38,13 +38,13 @@ __minimal_malloc (size_t n)
|
||||||
/* Consume any unused space in the last page of our data segment. */
|
/* Consume any unused space in the last page of our data segment. */
|
||||||
extern int _end attribute_hidden;
|
extern int _end attribute_hidden;
|
||||||
alloc_ptr = &_end;
|
alloc_ptr = &_end;
|
||||||
alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0)
|
alloc_end = (void *) 0 + ((((uintptr_t) alloc_ptr)
|
||||||
+ GLRO(dl_pagesize) - 1)
|
+ GLRO(dl_pagesize) - 1)
|
||||||
& ~(GLRO(dl_pagesize) - 1));
|
& ~(GLRO(dl_pagesize) - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the allocation pointer is ideally aligned. */
|
/* Make sure the allocation pointer is ideally aligned. */
|
||||||
alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + MALLOC_ALIGNMENT - 1)
|
alloc_ptr = (void *) 0 + ((((uintptr_t) alloc_ptr) + MALLOC_ALIGNMENT - 1)
|
||||||
& ~(MALLOC_ALIGNMENT - 1));
|
& ~(MALLOC_ALIGNMENT - 1));
|
||||||
|
|
||||||
if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr)
|
if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
argument to 'step' and 'advance' was defined only in regexp.h,
|
argument to 'step' and 'advance' was defined only in regexp.h,
|
||||||
as its definition depended on macros defined by the user. */
|
as its definition depended on macros defined by the user. */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <shlib-compat.h>
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ step (const char *string, const char *expbuf)
|
||||||
regmatch_t match; /* We only need info about the full match. */
|
regmatch_t match; /* We only need info about the full match. */
|
||||||
|
|
||||||
expbuf += __alignof (regex_t *);
|
expbuf += __alignof (regex_t *);
|
||||||
expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
|
expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
|
||||||
|
|
||||||
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
|
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
|
||||||
== REG_NOMATCH)
|
== REG_NOMATCH)
|
||||||
|
@ -73,7 +74,7 @@ advance (const char *string, const char *expbuf)
|
||||||
regmatch_t match; /* We only need info about the full match. */
|
regmatch_t match; /* We only need info about the full match. */
|
||||||
|
|
||||||
expbuf += __alignof__ (regex_t *);
|
expbuf += __alignof__ (regex_t *);
|
||||||
expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
|
expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
|
||||||
|
|
||||||
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
|
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
|
||||||
== REG_NOMATCH
|
== REG_NOMATCH
|
||||||
|
|
|
@ -159,7 +159,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
|
||||||
|
|
||||||
/* Now allocate the buffer the array for the group members. We must
|
/* Now allocate the buffer the array for the group members. We must
|
||||||
align the pointer. */
|
align the pointer. */
|
||||||
align = ((__alignof__ (char *) - (p - ((char *) 0)))
|
align = ((__alignof__ (char *) - ((uintptr_t) p))
|
||||||
& (__alignof__ (char *) - 1));
|
& (__alignof__ (char *) - 1));
|
||||||
total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *)
|
total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *)
|
||||||
+ gr_resp.gr_name_len + gr_resp.gr_passwd_len);
|
+ gr_resp.gr_name_len + gr_resp.gr_passwd_len);
|
||||||
|
|
|
@ -244,10 +244,9 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
|
||||||
/* A first check whether the buffer is sufficiently large is possible. */
|
/* A first check whether the buffer is sufficiently large is possible. */
|
||||||
/* Now allocate the buffer the array for the group members. We must
|
/* Now allocate the buffer the array for the group members. We must
|
||||||
align the pointer and the base of the h_addr_list pointers. */
|
align the pointer and the base of the h_addr_list pointers. */
|
||||||
align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
|
align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
|
||||||
& (__alignof__ (char *) - 1));
|
& (__alignof__ (char *) - 1));
|
||||||
align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp.h_name_len)
|
align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + hst_resp.h_name_len)))
|
||||||
- ((char *) 0)))
|
|
||||||
& (__alignof__ (char *) - 1));
|
& (__alignof__ (char *) - 1));
|
||||||
if (buflen < (align1 + hst_resp.h_name_len + align2
|
if (buflen < (align1 + hst_resp.h_name_len + align2
|
||||||
+ ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt
|
+ ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt
|
||||||
|
|
|
@ -205,11 +205,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
|
||||||
/* A first check whether the buffer is sufficiently large is possible. */
|
/* A first check whether the buffer is sufficiently large is possible. */
|
||||||
/* Now allocate the buffer the array for the group members. We must
|
/* Now allocate the buffer the array for the group members. We must
|
||||||
align the pointer and the base of the h_addr_list pointers. */
|
align the pointer and the base of the h_addr_list pointers. */
|
||||||
align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
|
align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
|
||||||
& (__alignof__ (char *) - 1));
|
& (__alignof__ (char *) - 1));
|
||||||
align2 = ((__alignof__ (char *) - ((cp + align1 + serv_resp.s_name_len
|
align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + serv_resp.s_name_len
|
||||||
+ serv_resp.s_proto_len)
|
+ serv_resp.s_proto_len)))
|
||||||
- ((char *) 0)))
|
|
||||||
& (__alignof__ (char *) - 1));
|
& (__alignof__ (char *) - 1));
|
||||||
if (buflen < (align1 + serv_resp.s_name_len + serv_resp.s_proto_len
|
if (buflen < (align1 + serv_resp.s_name_len + serv_resp.s_proto_len
|
||||||
+ align2
|
+ align2
|
||||||
|
|
|
@ -281,7 +281,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
|
||||||
/* Adjust the pointer so it is aligned for
|
/* Adjust the pointer so it is aligned for
|
||||||
storing pointers. */
|
storing pointers. */
|
||||||
first_unused += __alignof__ (char *) - 1;
|
first_unused += __alignof__ (char *) - 1;
|
||||||
first_unused -= ((first_unused - (char *) 0)
|
first_unused -= (((uintptr_t) first_unused)
|
||||||
% __alignof__ (char *));
|
% __alignof__ (char *));
|
||||||
result->alias_members = (char **) first_unused;
|
result->alias_members = (char **) first_unused;
|
||||||
|
|
||||||
|
|
|
@ -239,7 +239,7 @@ parse_list (char **linep, char *eol, char *buf_end, int terminator_c,
|
||||||
|
|
||||||
/* Adjust the pointer so it is aligned for storing pointers. */
|
/* Adjust the pointer so it is aligned for storing pointers. */
|
||||||
eol += __alignof__ (char *) - 1;
|
eol += __alignof__ (char *) - 1;
|
||||||
eol -= (eol - (char *) 0) % __alignof__ (char *);
|
eol -= ((uintptr_t) eol) % __alignof__ (char *);
|
||||||
/* We will start the storage here for the vector of pointers. */
|
/* We will start the storage here for the vector of pointers. */
|
||||||
list = (char **) eol;
|
list = (char **) eol;
|
||||||
|
|
||||||
|
|
|
@ -281,15 +281,15 @@ __qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((s & (sizeof (uint32_t) - 1)) == 0
|
if ((s & (sizeof (uint32_t) - 1)) == 0
|
||||||
&& ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
|
&& ((uintptr_t) b) % __alignof__ (uint32_t) == 0)
|
||||||
{
|
{
|
||||||
if (s == sizeof (uint32_t))
|
if (s == sizeof (uint32_t))
|
||||||
p.var = 0;
|
p.var = 0;
|
||||||
else if (s == sizeof (uint64_t)
|
else if (s == sizeof (uint64_t)
|
||||||
&& ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
|
&& ((uintptr_t) b) % __alignof__ (uint64_t) == 0)
|
||||||
p.var = 1;
|
p.var = 1;
|
||||||
else if ((s & (sizeof (unsigned long) - 1)) == 0
|
else if ((s & (sizeof (unsigned long) - 1)) == 0
|
||||||
&& ((char *) b - (char *) 0)
|
&& ((uintptr_t) b)
|
||||||
% __alignof__ (unsigned long) == 0)
|
% __alignof__ (unsigned long) == 0)
|
||||||
p.var = 2;
|
p.var = 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
break up that far. When the user program examines its break, it
|
break up that far. When the user program examines its break, it
|
||||||
will see this new value and not clobber our data. */
|
will see this new value and not clobber our data. */
|
||||||
__sbrk (GLRO(dl_pagesize)
|
__sbrk (GLRO(dl_pagesize)
|
||||||
- ((_end - (char *) 0) & (GLRO(dl_pagesize) - 1)));
|
- (((uintptr_t) _end) & (GLRO(dl_pagesize) - 1)));
|
||||||
|
|
||||||
/* If this is a SUID program we make sure that FDs 0, 1, and 2 are
|
/* If this is a SUID program we make sure that FDs 0, 1, and 2 are
|
||||||
allocated. If necessary we are doing it ourself. If it is not
|
allocated. If necessary we are doing it ourself. If it is not
|
||||||
|
|
Loading…
Add table
Reference in a new issue