mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
string: Enable __FORTIFY_LEVEL=3
This change enhances fortified string functions to use __builtin_dynamic_object_size under _FORTIFY_SOURCE=3 whenever the compiler supports it.
This commit is contained in:
parent
c43c579612
commit
2a3224c536
@ -123,10 +123,11 @@ libc_hidden_proto (__strerror_l)
|
|||||||
void __explicit_bzero_chk_internal (void *, size_t, size_t)
|
void __explicit_bzero_chk_internal (void *, size_t, size_t)
|
||||||
__THROW __nonnull ((1)) attribute_hidden;
|
__THROW __nonnull ((1)) attribute_hidden;
|
||||||
# define explicit_bzero(buf, len) \
|
# 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)
|
#elif !IS_IN (nonlib)
|
||||||
void __explicit_bzero_chk (void *, size_t, size_t) __THROW __nonnull ((1));
|
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
|
#endif
|
||||||
|
|
||||||
libc_hidden_builtin_proto (memchr)
|
libc_hidden_builtin_proto (memchr)
|
||||||
|
@ -26,13 +26,15 @@ __fortify_function void *
|
|||||||
__NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
|
__NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
|
||||||
size_t __len))
|
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 *
|
__fortify_function void *
|
||||||
__NTH (memmove (void *__dest, const void *__src, size_t __len))
|
__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
|
#ifdef __USE_GNU
|
||||||
@ -40,7 +42,8 @@ __fortify_function void *
|
|||||||
__NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
|
__NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
|
||||||
size_t __len))
|
size_t __len))
|
||||||
{
|
{
|
||||||
return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));
|
return __builtin___mempcpy_chk (__dest, __src, __len,
|
||||||
|
__glibc_objsize0 (__dest));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -53,7 +56,8 @@ __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
|
|||||||
__fortify_function void *
|
__fortify_function void *
|
||||||
__NTH (memset (void *__dest, int __ch, size_t __len))
|
__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
|
#ifdef __USE_MISC
|
||||||
@ -65,21 +69,21 @@ void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
|
|||||||
__fortify_function void
|
__fortify_function void
|
||||||
__NTH (explicit_bzero (void *__dest, size_t __len))
|
__NTH (explicit_bzero (void *__dest, size_t __len))
|
||||||
{
|
{
|
||||||
__explicit_bzero_chk (__dest, __len, __bos0 (__dest));
|
__explicit_bzero_chk (__dest, __len, __glibc_objsize0 (__dest));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__fortify_function char *
|
__fortify_function char *
|
||||||
__NTH (strcpy (char *__restrict __dest, const char *__restrict __src))
|
__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
|
#ifdef __USE_GNU
|
||||||
__fortify_function char *
|
__fortify_function char *
|
||||||
__NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))
|
__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
|
#endif
|
||||||
|
|
||||||
@ -88,14 +92,16 @@ __fortify_function char *
|
|||||||
__NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
|
__NTH (strncpy (char *__restrict __dest, const char *__restrict __src,
|
||||||
size_t __len))
|
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)
|
#if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6)
|
||||||
__fortify_function char *
|
__fortify_function char *
|
||||||
__NTH (stpncpy (char *__dest, const char *__src, size_t __n))
|
__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
|
#else
|
||||||
extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
|
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 *
|
__fortify_function char *
|
||||||
__NTH (strcat (char *__restrict __dest, const char *__restrict __src))
|
__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,
|
__NTH (strncat (char *__restrict __dest, const char *__restrict __src,
|
||||||
size_t __len))
|
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 */
|
#endif /* bits/string_fortified.h */
|
||||||
|
@ -22,13 +22,15 @@
|
|||||||
__fortify_function void
|
__fortify_function void
|
||||||
__NTH (bcopy (const void *__src, void *__dest, size_t __len))
|
__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
|
__fortify_function void
|
||||||
__NTH (bzero (void *__dest, size_t __len))
|
__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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user