[v3,05/16] stdio: Ensure *_chk routines have their hidden builtin definition available
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines,
there are unwanted PLT entries in libc.so.
---
debug/asprintf_chk.c | 4 +++-
debug/fgets_u_chk.c | 1 +
debug/fprintf_chk.c | 1 +
debug/sprintf_chk.c | 1 +
include/stdio.h | 8 +++++++-
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c | 1 +
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c | 1 +
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c | 1 +
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c | 1 +
9 files changed, 17 insertions(+), 2 deletions(-)
Comments
On 2023-06-28 04:42, Frédéric Bérat wrote:
> If libc_hidden_builtin_{def,proto} isn't properly set for *_chk routines,
> there are unwanted PLT entries in libc.so.
> ---
LGTM, but also pulling in Raji for a review of the ldbl bits.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> debug/asprintf_chk.c | 4 +++-
> debug/fgets_u_chk.c | 1 +
> debug/fprintf_chk.c | 1 +
> debug/sprintf_chk.c | 1 +
> include/stdio.h | 8 +++++++-
> sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c | 1 +
> sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c | 1 +
> sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c | 1 +
> sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c | 1 +
> 9 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/debug/asprintf_chk.c b/debug/asprintf_chk.c
> index 651c2cd76b..06d112de00 100644
> --- a/debug/asprintf_chk.c
> +++ b/debug/asprintf_chk.c
> @@ -22,7 +22,7 @@
> /* Write formatted output from FORMAT to a string which is
> allocated with malloc and stored in *STRING_PTR. */
> int
> -__asprintf_chk (char **result_ptr, int flag, const char *format, ...)
> +___asprintf_chk (char **result_ptr, int flag, const char *format, ...)
> {
> /* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n
> can only come from read-only format strings. */
> @@ -36,3 +36,5 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...)
>
> return ret;
> }
> +ldbl_hidden_def (___asprintf_chk, __asprintf_chk)
> +ldbl_strong_alias (___asprintf_chk, __asprintf_chk)
> diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c
> index a16ba655e6..74275381f5 100644
> --- a/debug/fgets_u_chk.c
> +++ b/debug/fgets_u_chk.c
> @@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp)
> fp->_flags |= old_error;
> return result;
> }
> +libc_hidden_builtin_def (__fgets_unlocked_chk)
> diff --git a/debug/fprintf_chk.c b/debug/fprintf_chk.c
> index b57d538d03..273051ef91 100644
> --- a/debug/fprintf_chk.c
> +++ b/debug/fprintf_chk.c
> @@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...)
>
> return ret;
> }
> +ldbl_hidden_def (___fprintf_chk, __fprintf_chk)
> ldbl_strong_alias (___fprintf_chk, __fprintf_chk)
> diff --git a/debug/sprintf_chk.c b/debug/sprintf_chk.c
> index b27f4afae8..e45f1e7b3b 100644
> --- a/debug/sprintf_chk.c
> +++ b/debug/sprintf_chk.c
> @@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...)
>
> return ret;
> }
> +ldbl_hidden_def (___sprintf_chk, __sprintf_chk)
> ldbl_strong_alias (___sprintf_chk, __sprintf_chk)
> diff --git a/include/stdio.h b/include/stdio.h
> index da47d1ce99..3afb0ff77b 100644
> --- a/include/stdio.h
> +++ b/include/stdio.h
> @@ -276,7 +276,13 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur;
> libc_hidden_proto (__open_memstream)
> libc_hidden_proto (__libc_fatal)
> rtld_hidden_proto (__libc_fatal)
> -libc_hidden_proto (__vsprintf_chk)
> +
> +libc_hidden_proto (__fgets_unlocked_chk)
> +
> +libc_hidden_ldbl_proto (__asprintf_chk)
> +libc_hidden_ldbl_proto (__fprintf_chk)
> +libc_hidden_ldbl_proto (__sprintf_chk)
> +libc_hidden_ldbl_proto (__vsprintf_chk)
>
> extern FILE * __fmemopen (void *buf, size_t len, const char *mode);
> libc_hidden_proto (__fmemopen)
> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c
> index fbf953a728..6e93ee81fc 100644
> --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c
> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-asprintf_chk.c
> @@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...)
>
> return done;
> }
> +hidden_def (___ieee128___asprintf_chk)
> strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128)
> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c
> index bd10e9c3db..e0865b6663 100644
> --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c
> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf_chk.c
> @@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...)
>
> return done;
> }
> +hidden_def (___ieee128___fprintf_chk)
> strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128)
> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c
> index 0039c3b53d..762757a5c7 100644
> --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c
> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf_chk.c
> @@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen,
>
> return done;
> }
> +hidden_def (___ieee128___sprintf_chk)
> strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128)
> diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c
> index 22137269c0..c251b60d4e 100644
> --- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c
> +++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vsprintf_chk.c
> @@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen,
>
> return __vsprintf_internal (string, slen, format, ap, mode);
> }
> +hidden_def (___ieee128___vsprintf_chk)
> strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)
@@ -22,7 +22,7 @@
/* Write formatted output from FORMAT to a string which is
allocated with malloc and stored in *STRING_PTR. */
int
-__asprintf_chk (char **result_ptr, int flag, const char *format, ...)
+___asprintf_chk (char **result_ptr, int flag, const char *format, ...)
{
/* For flag > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n
can only come from read-only format strings. */
@@ -36,3 +36,5 @@ __asprintf_chk (char **result_ptr, int flag, const char *format, ...)
return ret;
}
+ldbl_hidden_def (___asprintf_chk, __asprintf_chk)
+ldbl_strong_alias (___asprintf_chk, __asprintf_chk)
@@ -56,3 +56,4 @@ __fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp)
fp->_flags |= old_error;
return result;
}
+libc_hidden_builtin_def (__fgets_unlocked_chk)
@@ -35,4 +35,5 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...)
return ret;
}
+ldbl_hidden_def (___fprintf_chk, __fprintf_chk)
ldbl_strong_alias (___fprintf_chk, __fprintf_chk)
@@ -42,4 +42,5 @@ ___sprintf_chk (char *s, int flag, size_t slen, const char *format, ...)
return ret;
}
+ldbl_hidden_def (___sprintf_chk, __sprintf_chk)
ldbl_strong_alias (___sprintf_chk, __sprintf_chk)
@@ -276,7 +276,13 @@ extern FILE *__open_memstream (char **, size_t *) __THROW __wur;
libc_hidden_proto (__open_memstream)
libc_hidden_proto (__libc_fatal)
rtld_hidden_proto (__libc_fatal)
-libc_hidden_proto (__vsprintf_chk)
+
+libc_hidden_proto (__fgets_unlocked_chk)
+
+libc_hidden_ldbl_proto (__asprintf_chk)
+libc_hidden_ldbl_proto (__fprintf_chk)
+libc_hidden_ldbl_proto (__sprintf_chk)
+libc_hidden_ldbl_proto (__vsprintf_chk)
extern FILE * __fmemopen (void *buf, size_t len, const char *mode);
libc_hidden_proto (__fmemopen)
@@ -35,4 +35,5 @@ ___ieee128___asprintf_chk (char **string_ptr, int flag, const char *format, ...)
return done;
}
+hidden_def (___ieee128___asprintf_chk)
strong_alias (___ieee128___asprintf_chk, __asprintf_chkieee128)
@@ -35,4 +35,5 @@ ___ieee128___fprintf_chk (FILE *fp, int flag, const char *format, ...)
return done;
}
+hidden_def (___ieee128___fprintf_chk)
strong_alias (___ieee128___fprintf_chk, __fprintf_chkieee128)
@@ -43,4 +43,5 @@ ___ieee128___sprintf_chk (char *s, int flag, size_t slen,
return done;
}
+hidden_def (___ieee128___sprintf_chk)
strong_alias (___ieee128___sprintf_chk, __sprintf_chkieee128)
@@ -35,4 +35,5 @@ ___ieee128___vsprintf_chk (char *string, int flag, size_t slen,
return __vsprintf_internal (string, slen, format, ap, mode);
}
+hidden_def (___ieee128___vsprintf_chk)
strong_alias (___ieee128___vsprintf_chk, __vsprintf_chkieee128)