[v7,3/4] string: Enable __FORTIFY_LEVEL=3
Commit Message
This change enhances fortified string functions to use
__builtin_dynamic_object_size under _FORTIFY_SOURCE=3 whenever the
compiler supports it.
---
include/string.h | 5 +++--
string/bits/string_fortified.h | 29 ++++++++++++++++++-----------
string/bits/strings_fortified.h | 6 ++++--
3 files changed, 25 insertions(+), 15 deletions(-)
Comments
On 30/12/2020 03:43, Siddhesh Poyarekar wrote:
> This change enhances fortified string functions to use
> __builtin_dynamic_object_size under _FORTIFY_SOURCE=3 whenever the
> compiler supports it.
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> include/string.h | 5 +++--
> string/bits/string_fortified.h | 29 ++++++++++++++++++-----------
> string/bits/strings_fortified.h | 6 ++++--
> 3 files changed, 25 insertions(+), 15 deletions(-)
>
> diff --git a/include/string.h b/include/string.h
> index 7d344d77d4..81dab39891 100644
> --- a/include/string.h
> +++ b/include/string.h
> @@ -123,10 +123,11 @@ libc_hidden_proto (__strerror_l)
> void __explicit_bzero_chk_internal (void *, size_t, size_t)
> __THROW __nonnull ((1)) attribute_hidden;
> # define explicit_bzero(buf, len) \
> - __explicit_bzero_chk_internal (buf, len, __bos0 (buf))
> + __explicit_bzero_chk_internal (buf, len, __glibc_objsize0 (buf))
> #elif !IS_IN (nonlib)
> void __explicit_bzero_chk (void *, size_t, size_t) __THROW __nonnull ((1));
> -# define explicit_bzero(buf, len) __explicit_bzero_chk (buf, len, __bos0 (buf))
> +# define explicit_bzero(buf, len) __explicit_bzero_chk (buf, len, \
> + __glibc_objsize0 (buf))
> #endif
>
> libc_hidden_builtin_proto (memchr)
> diff --git a/string/bits/string_fortified.h b/string/bits/string_fortified.h
> index 4c1aeb45f1..92d75f10fa 100644
> --- a/string/bits/string_fortified.h
> +++ b/string/bits/string_fortified.h
> @@ -26,13 +26,15 @@ __fortify_function void *
> __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
> size_t __len))
> {
> - return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
> + return __builtin___memcpy_chk (__dest, __src, __len,
> + __glibc_objsize0 (__dest));
> }
>
> __fortify_function void *
> __NTH (memmove (void *__dest, const void *__src, size_t __len))
> {
> - return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
> + return __builtin___memmove_chk (__dest, __src, __len,
> + __glibc_objsize0 (__dest));
> }
>
> #ifdef __USE_GNU
> @@ -40,7 +42,8 @@ __fortify_function void *
> __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
> size_t __len))
> {
> - return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
> + return __builtin___mempcpy_chk (__dest, __src, __len,
> + __glibc_objsize0 (__dest));
> }
> #endif
>
> @@ -53,7 +56,8 @@ __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
> __fortify_function void *
> __NTH (memset (void *__dest, int __ch, size_t __len))
> {
> - return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
> + return __builtin___memset_chk (__dest, __ch, __len,
> + __glibc_objsize0 (__dest));
> }
>
> #ifdef __USE_MISC
> @@ -65,21 +69,21 @@ void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
> __fortify_function void
> __NTH (explicit_bzero (void *__dest, size_t __len))
> {
> - __explicit_bzero_chk (__dest, __len, __bos0 (__dest));
> + __explicit_bzero_chk (__dest, __len, __glibc_objsize0 (__dest));
> }
> #endif
>
> __fortify_function char *
> __NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
> {
> - return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
> + return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest));
> }
>
> #ifdef __USE_GNU
> __fortify_function char *
> __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
> {
> - return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
> + return __builtin___stpcpy_chk (__dest, __src, __glibc_objsize (__dest));
> }
> #endif
>
> @@ -88,14 +92,16 @@ __fortify_function char *
> __NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
> size_t __len))
> {
> - return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
> + return __builtin___strncpy_chk (__dest, __src, __len,
> + __glibc_objsize (__dest));
> }
>
> #if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6)
> __fortify_function char *
> __NTH (stpncpy (char *__dest, const char *__src, size_t __n))
> {
> - return __builtin___stpncpy_chk (__dest, __src, __n, __bos (__dest));
> + return __builtin___stpncpy_chk (__dest, __src, __n,
> + __glibc_objsize (__dest));
> }
> #else
> extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
> @@ -118,7 +124,7 @@ __NTH (stpncpy (char *__dest, const char *__src, size_t __n))
> __fortify_function char *
> __NTH (strcat (char *__restrict __dest, const char *__restrict __src))
> {
> - return __builtin___strcat_chk (__dest, __src, __bos (__dest));
> + return __builtin___strcat_chk (__dest, __src, __glibc_objsize (__dest));
> }
>
>
> @@ -126,7 +132,8 @@ __fortify_function char *
> __NTH (strncat (char *__restrict __dest, const char *__restrict __src,
> size_t __len))
> {
> - return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
> + return __builtin___strncat_chk (__dest, __src, __len,
> + __glibc_objsize (__dest));
> }
>
> #endif /* bits/string_fortified.h */
> diff --git a/string/bits/strings_fortified.h b/string/bits/strings_fortified.h
> index d4091f4f69..7752faf4e3 100644
> --- a/string/bits/strings_fortified.h
> +++ b/string/bits/strings_fortified.h
> @@ -22,13 +22,15 @@
> __fortify_function void
> __NTH (bcopy (const void *__src, void *__dest, size_t __len))
> {
> - (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
> + (void) __builtin___memmove_chk (__dest, __src, __len,
> + __glibc_objsize0 (__dest));
> }
>
> __fortify_function void
> __NTH (bzero (void *__dest, size_t __len))
> {
> - (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
> + (void) __builtin___memset_chk (__dest, '\0', __len,
> + __glibc_objsize0 (__dest));
> }
>
> #endif
>
@@ -123,10 +123,11 @@ libc_hidden_proto (__strerror_l)
void __explicit_bzero_chk_internal (void *, size_t, size_t)
__THROW __nonnull ((1)) attribute_hidden;
# define explicit_bzero(buf, len) \
- __explicit_bzero_chk_internal (buf, len, __bos0 (buf))
+ __explicit_bzero_chk_internal (buf, len, __glibc_objsize0 (buf))
#elif !IS_IN (nonlib)
void __explicit_bzero_chk (void *, size_t, size_t) __THROW __nonnull ((1));
-# define explicit_bzero(buf, len) __explicit_bzero_chk (buf, len, __bos0 (buf))
+# define explicit_bzero(buf, len) __explicit_bzero_chk (buf, len, \
+ __glibc_objsize0 (buf))
#endif
libc_hidden_builtin_proto (memchr)
@@ -26,13 +26,15 @@ __fortify_function void *
__NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
size_t __len))
{
- return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
+ return __builtin___memcpy_chk (__dest, __src, __len,
+ __glibc_objsize0 (__dest));
}
__fortify_function void *
__NTH (memmove (void *__dest, const void *__src, size_t __len))
{
- return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+ return __builtin___memmove_chk (__dest, __src, __len,
+ __glibc_objsize0 (__dest));
}
#ifdef __USE_GNU
@@ -40,7 +42,8 @@ __fortify_function void *
__NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
size_t __len))
{
- return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
+ return __builtin___mempcpy_chk (__dest, __src, __len,
+ __glibc_objsize0 (__dest));
}
#endif
@@ -53,7 +56,8 @@ __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
__fortify_function void *
__NTH (memset (void *__dest, int __ch, size_t __len))
{
- return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
+ return __builtin___memset_chk (__dest, __ch, __len,
+ __glibc_objsize0 (__dest));
}
#ifdef __USE_MISC
@@ -65,21 +69,21 @@ void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
__fortify_function void
__NTH (explicit_bzero (void *__dest, size_t __len))
{
- __explicit_bzero_chk (__dest, __len, __bos0 (__dest));
+ __explicit_bzero_chk (__dest, __len, __glibc_objsize0 (__dest));
}
#endif
__fortify_function char *
__NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
{
- return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
+ return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest));
}
#ifdef __USE_GNU
__fortify_function char *
__NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
{
- return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));
+ return __builtin___stpcpy_chk (__dest, __src, __glibc_objsize (__dest));
}
#endif
@@ -88,14 +92,16 @@ __fortify_function char *
__NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
size_t __len))
{
- return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
+ return __builtin___strncpy_chk (__dest, __src, __len,
+ __glibc_objsize (__dest));
}
#if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6)
__fortify_function char *
__NTH (stpncpy (char *__dest, const char *__src, size_t __n))
{
- return __builtin___stpncpy_chk (__dest, __src, __n, __bos (__dest));
+ return __builtin___stpncpy_chk (__dest, __src, __n,
+ __glibc_objsize (__dest));
}
#else
extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
@@ -118,7 +124,7 @@ __NTH (stpncpy (char *__dest, const char *__src, size_t __n))
__fortify_function char *
__NTH (strcat (char *__restrict __dest, const char *__restrict __src))
{
- return __builtin___strcat_chk (__dest, __src, __bos (__dest));
+ return __builtin___strcat_chk (__dest, __src, __glibc_objsize (__dest));
}
@@ -126,7 +132,8 @@ __fortify_function char *
__NTH (strncat (char *__restrict __dest, const char *__restrict __src,
size_t __len))
{
- return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));
+ return __builtin___strncat_chk (__dest, __src, __len,
+ __glibc_objsize (__dest));
}
#endif /* bits/string_fortified.h */
@@ -22,13 +22,15 @@
__fortify_function void
__NTH (bcopy (const void *__src, void *__dest, size_t __len))
{
- (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+ (void) __builtin___memmove_chk (__dest, __src, __len,
+ __glibc_objsize0 (__dest));
}
__fortify_function void
__NTH (bzero (void *__dest, size_t __len))
{
- (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
+ (void) __builtin___memset_chk (__dest, '\0', __len,
+ __glibc_objsize0 (__dest));
}
#endif