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:
Qihao Chencao 2022-06-28 16:57:55 +08:00 committed by Adhemerval Zanella
parent dab6344279
commit cc4d6614b5
12 changed files with 35 additions and 36 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;
} }

View file

@ -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