From patchwork Tue Jun 28 08:57:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: develop--- via Libc-alpha X-Patchwork-Id: 55474 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1A312383878D for ; Tue, 28 Jun 2022 09:05:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1A312383878D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1656407137; bh=SQeLQDptm23C8UFFsIf2Qcyv8y1DsNvLSlSCNqcg7dU=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=ZUKnIsjbhYY3XZ4O+d5Oxb6wiv1TBFM0iL0Ra5nunWM3UpU9ofxwohG1gNldXe0TQ ciGJQShOS33vcMA0gQpbUQ501wBXv2JoJWh4oSn+GCYrar+LLlj0nAsv+KKxO41ANp p7jgR6/fVYT6PDA9jFc8e8C2RM6CBGFXtbwU3yi4= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by sourceware.org (Postfix) with ESMTPS id 295713857836 for ; Tue, 28 Jun 2022 09:05:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 295713857836 Received: from localhost.localdomain ([183.234.93.146]) by newxmesmtplogicsvrsza5.qq.com (NewEsmtp) with SMTP id 14804688; Tue, 28 Jun 2022 17:05:08 +0800 X-QQ-mid: xmsmtpt1656407108tvykvvo32 Message-ID: X-QQ-XMAILINFO: MZ4XH1L85f1rqPFvsvLqTSwI5ClQszFqCE8Xaene2tYtQll9oOmsSHRqy6WSdr QZk3WffBkHwAJEq0l2sQmB8c3KbHQO3fuINNq+7hlmQ4OVNCtLu7nBCoiy33FN3le17H/bt8xzfK Y2+MI/Xfu0J+lYoPBQvPSwXQpM8oiNrmYOXpL8h6KhBGOX2ZCb+CTGqKIOY2tEbK72bslNyeLs9N 95AW+kd3/FSCjmJ790UtVYGnxsvEX8GClPxPJOaoy+bR+XYfna80Hrp0kGyBEpS4VApVmLYvMkZG GcY0z/IKM3r5+0ilk20Ba2Aj9nd+w2UHQeC1hIXmxwnwTKPda4Ip6pHKHmD8R+C0xvkBs3MEJYzX eLRrbB3YP/JlihlVfpqXhG4F9tghamia9WW4/jn8YiWQQwsmonw8uLWz6e9QqXsVfqwqoH2OGiWo OX6RGcYoqTuwe3HAYu4raDpDbUmuCthdc3ztW+evOvoxaK5dpBd+cMg0zXQGvtCWpr7lXEDVKXkn Tr53YJmNXjNRP4pPT9Q6Kl3beSZBbbotavTvea5f0xr+afEIGjwOntkt1Ye4uylKTj6agaswz5D4 Q4U73KoXnzabTANUqg6Jz7lW0QYZvWm++ct3GGnTLeGP26MEgrv9eHjg98NsNSLcuUZ214x5JhJ9 2HKDp/UnYGyiV5ODT8/z6SWDtZmxANgOg+63SRNk4xxBnenXExJUnTz4eKG+ap0lN6yVb/fSskC1 qfdI3ZHat8h194JeW4jCToqcxhcSduNE30AiGHLSpCJLXRbll9u0TXNpolgTC5SskkSOXXNorbCE FDRCumHvlouUM3oBn2CVycH+GUOaKOIMCyw3Lpt2UkgDFXnP2AyYqWcugkUtfwYUPMdQglMtUXoZ telk72XRQsEyVg1AR5NIMwowHOseFGzW0j+coARjo92ZIWf/HP084= To: libc-alpha@sourceware.org Subject: [PATCH v2] Use uintptr_t instead of performing pointer subtraction with a null pointer Date: Tue, 28 Jun 2022 16:57:55 +0800 X-OQ-MSGID: <20220628085754.29161-1-twose@qq.com> X-Mailer: git-send-email 2.36.1 MIME-Version: 1.0 X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HELO_DYNAMIC_IPADDR, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_WEB, RDNS_DYNAMIC, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: twose--- via Libc-alpha From: develop--- via Libc-alpha Reply-To: twose@qq.com Cc: Qihao Chencao Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" From: Qihao Chencao Signed-off-by: Qihao Chencao Reviewed-by: Adhemerval Zanella --- crypt/md5-crypt.c | 12 ++++++------ crypt/sha256-crypt.c | 12 ++++++------ crypt/sha512-crypt.c | 12 ++++++------ elf/dl-minimal-malloc.c | 4 ++-- misc/regexp.c | 5 +++-- nscd/nscd_getgr_r.c | 2 +- nscd/nscd_gethst_r.c | 5 ++--- nscd/nscd_getserv_r.c | 7 +++---- nss/nss_files/files-alias.c | 2 +- nss/nss_files/files-parse.c | 2 +- stdlib/msort.c | 6 +++--- sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +- 12 files changed, 35 insertions(+), 36 deletions(-) diff --git a/crypt/md5-crypt.c b/crypt/md5-crypt.c index 7c4fb9fb97..4a7f337f5f 100644 --- a/crypt/md5-crypt.c +++ b/crypt/md5-crypt.c @@ -110,7 +110,7 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen) salt_len = MIN (strcspn (salt, "$"), 8); key_len = strlen (key); - if ((key - (char *) 0) % __alignof__ (md5_uint32) != 0) + if (((uintptr_t) key) % __alignof__ (md5_uint32) != 0) { char *tmp; @@ -125,19 +125,19 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen) key = copied_key = memcpy (tmp + __alignof__ (md5_uint32) - - (tmp - (char *) 0) % __alignof__ (md5_uint32), + - ((uintptr_t) tmp) % __alignof__ (md5_uint32), 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)); salt = copied_salt = memcpy (tmp + __alignof__ (md5_uint32) - - (tmp - (char *) 0) % __alignof__ (md5_uint32), + - ((uintptr_t) tmp) % __alignof__ (md5_uint32), salt, salt_len); - assert ((salt - (char *) 0) % __alignof__ (md5_uint32) == 0); + assert (((uintptr_t) salt) % __alignof__ (md5_uint32) == 0); } #ifdef USE_NSS diff --git a/crypt/sha256-crypt.c b/crypt/sha256-crypt.c index a98a968a8b..3f7dd11140 100644 --- a/crypt/sha256-crypt.c +++ b/crypt/sha256-crypt.c @@ -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); key_len = strlen (key); - if ((key - (char *) 0) % __alignof__ (uint32_t) != 0) + if (((uintptr_t) key) % __alignof__ (uint32_t) != 0) { char *tmp; @@ -157,20 +157,20 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen) key = copied_key = memcpy (tmp + __alignof__ (uint32_t) - - (tmp - (char *) 0) % __alignof__ (uint32_t), + - ((uintptr_t) tmp) % __alignof__ (uint32_t), 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)); alloca_used += salt_len + __alignof__ (uint32_t); salt = copied_salt = memcpy (tmp + __alignof__ (uint32_t) - - (tmp - (char *) 0) % __alignof__ (uint32_t), + - ((uintptr_t) tmp) % __alignof__ (uint32_t), salt, salt_len); - assert ((salt - (char *) 0) % __alignof__ (uint32_t) == 0); + assert (((uintptr_t) salt) % __alignof__ (uint32_t) == 0); } #ifdef USE_NSS diff --git a/crypt/sha512-crypt.c b/crypt/sha512-crypt.c index ea13527c09..28e40c3e13 100644 --- a/crypt/sha512-crypt.c +++ b/crypt/sha512-crypt.c @@ -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); key_len = strlen (key); - if ((key - (char *) 0) % __alignof__ (uint64_t) != 0) + if (((uintptr_t) key) % __alignof__ (uint64_t) != 0) { char *tmp; @@ -157,19 +157,19 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen) key = copied_key = memcpy (tmp + __alignof__ (uint64_t) - - (tmp - (char *) 0) % __alignof__ (uint64_t), + - ((uintptr_t) tmp) % __alignof__ (uint64_t), 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)); salt = copied_salt = memcpy (tmp + __alignof__ (uint64_t) - - (tmp - (char *) 0) % __alignof__ (uint64_t), + - ((uintptr_t) tmp) % __alignof__ (uint64_t), salt, salt_len); - assert ((salt - (char *) 0) % __alignof__ (uint64_t) == 0); + assert (((uintptr_t) salt) % __alignof__ (uint64_t) == 0); } #ifdef USE_NSS diff --git a/elf/dl-minimal-malloc.c b/elf/dl-minimal-malloc.c index 7cca54208d..44b54124ad 100644 --- a/elf/dl-minimal-malloc.c +++ b/elf/dl-minimal-malloc.c @@ -38,13 +38,13 @@ __minimal_malloc (size_t n) /* Consume any unused space in the last page of our data segment. */ extern int _end attribute_hidden; 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)); } /* 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)); if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr) diff --git a/misc/regexp.c b/misc/regexp.c index b1ea9e7eeb..81140d5073 100644 --- a/misc/regexp.c +++ b/misc/regexp.c @@ -23,6 +23,7 @@ argument to 'step' and 'advance' was defined only in regexp.h, as its definition depended on macros defined by the user. */ +#include #include #include @@ -50,7 +51,7 @@ step (const char *string, const char *expbuf) regmatch_t match; /* We only need info about the full match. */ 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) == REG_NOMATCH) @@ -73,7 +74,7 @@ advance (const char *string, const char *expbuf) regmatch_t match; /* We only need info about the full match. */ 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) == REG_NOMATCH diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index 3636c031ec..caea464d15 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -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 align the pointer. */ - align = ((__alignof__ (char *) - (p - ((char *) 0))) + align = ((__alignof__ (char *) - ((uintptr_t) p)) & (__alignof__ (char *) - 1)); total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *) + gr_resp.gr_name_len + gr_resp.gr_passwd_len); diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c index 9becb62033..f3e22f8cef 100644 --- a/nscd/nscd_gethst_r.c +++ b/nscd/nscd_gethst_r.c @@ -246,10 +246,9 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, /* A first check whether the buffer is sufficiently large is possible. */ /* Now allocate the buffer the array for the group members. We must 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)); - align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp.h_name_len) - - ((char *) 0))) + align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + hst_resp.h_name_len))) & (__alignof__ (char *) - 1)); if (buflen < (align1 + hst_resp.h_name_len + align2 + ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c index 42b875d024..9603c66330 100644 --- a/nscd/nscd_getserv_r.c +++ b/nscd/nscd_getserv_r.c @@ -207,11 +207,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto, /* A first check whether the buffer is sufficiently large is possible. */ /* Now allocate the buffer the array for the group members. We must 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)); - align2 = ((__alignof__ (char *) - ((cp + align1 + serv_resp.s_name_len - + serv_resp.s_proto_len) - - ((char *) 0))) + align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + serv_resp.s_name_len + + serv_resp.s_proto_len))) & (__alignof__ (char *) - 1)); if (buflen < (align1 + serv_resp.s_name_len + serv_resp.s_proto_len + align2 diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index 505721388f..2fd08f1d34 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -281,7 +281,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, /* Adjust the pointer so it is aligned for storing pointers. */ first_unused += __alignof__ (char *) - 1; - first_unused -= ((first_unused - (char *) 0) + first_unused -= (((uintptr_t) first_unused) % __alignof__ (char *)); result->alias_members = (char **) first_unused; diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c index c90e293802..a3c4970491 100644 --- a/nss/nss_files/files-parse.c +++ b/nss/nss_files/files-parse.c @@ -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. */ 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. */ list = (char **) eol; diff --git a/stdlib/msort.c b/stdlib/msort.c index cbe9a4a8fd..50e1afbe59 100644 --- a/stdlib/msort.c +++ b/stdlib/msort.c @@ -281,15 +281,15 @@ __qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg) else { 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)) p.var = 0; else if (s == sizeof (uint64_t) - && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0) + && ((uintptr_t) b) % __alignof__ (uint64_t) == 0) p.var = 1; else if ((s & (sizeof (unsigned long) - 1)) == 0 - && ((char *) b - (char *) 0) + && ((uintptr_t) b) % __alignof__ (unsigned long) == 0) p.var = 2; } diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.c b/sysdeps/unix/sysv/linux/dl-sysdep.c index 9e15c5bf69..dcb0601207 100644 --- a/sysdeps/unix/sysv/linux/dl-sysdep.c +++ b/sysdeps/unix/sysv/linux/dl-sysdep.c @@ -129,7 +129,7 @@ _dl_sysdep_start (void **start_argptr, break up that far. When the user program examines its break, it will see this new value and not clobber our data. */ __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 allocated. If necessary we are doing it ourself. If it is not