[PATCH v2] debug: Fix missing fortify checks in nldbl compat wrappers (bug 34529)
Florian Weimer <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.alpha |
|---|---|
| Message-ID | <[email protected]> |
Re-use debug/tst-fortify to exercise at least some of the build
variants.
---
v2: Inject the additional tests differently, so that debug/Makfiles
produces the required $(gen-locales) dependencies.
sysdeps/ieee754/ldbl-opt/Makefile | 18 ++++++++++++++++++
sysdeps/ieee754/ldbl-opt/nldbl-compat.c | 8 ++++++++
sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-1.c | 1 +
sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-2.c | 1 +
4 files changed, 28 insertions(+)
diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile
index ef7da1f830..7d91f6c48f 100644
--- a/sysdeps/ieee754/ldbl-opt/Makefile
+++ b/sysdeps/ieee754/ldbl-opt/Makefile
@@ -555,6 +555,24 @@ CFLAGS-tst-nldbl-wscanf-binary-gnu89.c += -mlong-double-64 -std=gnu89 \
endif
+ifeq ($(subdir), debug)
+tests-all-chk += \
+ tst-nldbl-fortify-1 \
+ tst-nldbl-fortify-2
+ # tests
+
+CFLAGS-tst-nldbl-fortify-1.c += -mlong-double-64 \
+ $(no-fortify-source) -D_FORTIFY_SOURCE=1 \
+ -Wno-format -Wno-deprecated-declarations -Wno-error
+
+CFLAGS-tst-nldbl-fortify-2.c += -mlong-double-64 \
+ $(no-fortify-source) -D_FORTIFY_SOURCE=2 \
+ -Wno-format -Wno-deprecated-declarations -Wno-error
+
+$(objpfx)tst-nldbl-fortify-1: $(common-objpfx)math/libnldbl_nonshared.a
+$(objpfx)tst-nldbl-fortify-2: $(common-objpfx)math/libnldbl_nonshared.a
+endif # $(subdir) == debug
+
routines_no_fortify += \
nldbl-asprintf \
nldbl-dprintf \
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
index e239cd5bc5..4bc21f875c 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
@@ -517,6 +517,10 @@ __nldbl___sprintf_chk (char *s, int flag, size_t slen, const char *fmt, ...)
if (flag > 0)
mode |= PRINTF_FORTIFY;
+ /* Regardless of the value of flag, let __vsprintf_internal know
+ that this is a call from *printf_chk. */
+ mode |= PRINTF_CHK;
+
va_start (ap, fmt);
ret = __vsprintf_internal (s, slen, fmt, ap, mode);
va_end (ap);
@@ -605,6 +609,10 @@ __nldbl___vsprintf_chk (char *string, int flag, size_t slen, const char *fmt,
if (flag > 0)
mode |= PRINTF_FORTIFY;
+ /* Regardless of the value of flag, let __vsprintf_internal know
+ that this is a call from *printf_chk. */
+ mode |= PRINTF_CHK;
+
return __vsprintf_internal (string, slen, fmt, ap, mode);
}
diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-1.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-1.c
new file mode 100644
index 0000000000..90269ec6d9
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-1.c
@@ -0,0 +1 @@
+#include <debug/tst-fortify.c>
diff --git a/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-2.c b/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-2.c
new file mode 100644
index 0000000000..90269ec6d9
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-opt/tst-nldbl-fortify-2.c
@@ -0,0 +1 @@
+#include <debug/tst-fortify.c>
base-commit: 6144ef08960e1db191db2054abef02d361042018