[v2,2/2] debug: Add tests for _FORTIFY_SOURCE=3

Message ID 20211020052434.1221167-3-siddhesh@sourceware.org
State Committed
Commit ad6f2a010c2ce759936de4747f6e0d53991912f8
Headers
Series _FORTIFY_SOURCE=3 improvements |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

Siddhesh Poyarekar Oct. 20, 2021, 5:24 a.m. UTC
  Add some testing coverage for _FORTIFY_SOURCE=3.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
---
 debug/Makefile    |  13 ++++--
 debug/tst-chk1.c  | 102 +++++++++++++++++++++++++---------------------
 debug/tst-chk7.c  |   2 +
 debug/tst-chk8.cc |   2 +
 4 files changed, 69 insertions(+), 50 deletions(-)
 create mode 100644 debug/tst-chk7.c
 create mode 100644 debug/tst-chk8.cc
  

Comments

Adhemerval Zanella Oct. 20, 2021, 12:06 p.m. UTC | #1
On 20/10/2021 02:24, Siddhesh Poyarekar wrote:
> Add some testing coverage for _FORTIFY_SOURCE=3.
> 
> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  debug/Makefile    |  13 ++++--
>  debug/tst-chk1.c  | 102 +++++++++++++++++++++++++---------------------
>  debug/tst-chk7.c  |   2 +
>  debug/tst-chk8.cc |   2 +
>  4 files changed, 69 insertions(+), 50 deletions(-)
>  create mode 100644 debug/tst-chk7.c
>  create mode 100644 debug/tst-chk8.cc
> 
> diff --git a/debug/Makefile b/debug/Makefile
> index 6893111cbf..357f888246 100644
> --- a/debug/Makefile
> +++ b/debug/Makefile
> @@ -120,6 +120,8 @@ CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
> +CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> +CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
>  CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
> @@ -129,6 +131,7 @@ CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
>  LDLIBS-tst-chk4 = -lstdc++
>  LDLIBS-tst-chk5 = -lstdc++
>  LDLIBS-tst-chk6 = -lstdc++
> +LDLIBS-tst-chk8 = -lstdc++
>  LDLIBS-tst-lfschk4 = -lstdc++
>  LDLIBS-tst-lfschk5 = -lstdc++
>  LDLIBS-tst-lfschk6 = -lstdc++
> @@ -150,16 +153,16 @@ CFLAGS-tst-ssp-1.c += -fstack-protector-all
>  
>  tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \
>  	tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \
> -	tst-chk4 tst-chk5 tst-chk6 tst-lfschk4 tst-lfschk5 tst-lfschk6 \
> -	tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 tst-backtrace4 \
> -	tst-backtrace5 tst-backtrace6
> +	tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \
> +	tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \
> +	tst-backtrace4 tst-backtrace5 tst-backtrace6
>  
>  ifeq ($(have-ssp),yes)
>  tests += tst-ssp-1
>  endif
>  
>  ifeq (,$(CXX))
> -tests-unsupported = tst-chk4 tst-chk5 tst-chk6 \
> +tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \
>  		    tst-lfschk4 tst-lfschk5 tst-lfschk6
>  endif
>  
> @@ -193,6 +196,8 @@ $(objpfx)tst-chk3.out: $(gen-locales)
>  $(objpfx)tst-chk4.out: $(gen-locales)
>  $(objpfx)tst-chk5.out: $(gen-locales)
>  $(objpfx)tst-chk6.out: $(gen-locales)
> +$(objpfx)tst-chk7.out: $(gen-locales)
> +$(objpfx)tst-chk8.out: $(gen-locales)
>  $(objpfx)tst-lfschk1.out: $(gen-locales)
>  $(objpfx)tst-lfschk2.out: $(gen-locales)
>  $(objpfx)tst-lfschk3.out: $(gen-locales)
> diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
> index 6712770201..d11e536f87 100644
> --- a/debug/tst-chk1.c
> +++ b/debug/tst-chk1.c
> @@ -82,8 +82,14 @@ handler (int sig)
>      _exit (127);
>  }
>  
> +#if __USE_FORTIFY_LEVEL == 3
> +volatile size_t buf_size = 10;
> +#else
>  char buf[10];
>  wchar_t wbuf[10];
> +#define buf_size sizeof (buf)
> +#endif
> +
>  volatile size_t l0;
>  volatile char *p;
>  volatile wchar_t *wp;
> @@ -122,6 +128,10 @@ int num2 = 987654;
>  static int
>  do_test (void)
>  {
> +#if __USE_FORTIFY_LEVEL == 3
> +  char *buf = (char *) malloc (buf_size);
> +  wchar_t *wbuf = (wchar_t *) malloc (buf_size * sizeof (wchar_t));
> +#endif
>    set_fortify_handler (handler);
>  
>    struct A { char buf1[9]; char buf2[1]; } a;
> @@ -946,93 +956,93 @@ do_test (void)
>  
>    rewind (stdin);
>  
> -  if (fgets (buf, sizeof (buf), stdin) != buf
> +  if (fgets (buf, buf_size, stdin) != buf
>        || memcmp (buf, "abcdefgh\n", 10))
>      FAIL ();
> -  if (fgets (buf, sizeof (buf), stdin) != buf || memcmp (buf, "ABCDEFGHI", 10))
> +  if (fgets (buf, buf_size, stdin) != buf || memcmp (buf, "ABCDEFGHI", 10))
>      FAIL ();
>  
>    rewind (stdin);
>  
> -  if (fgets (buf, l0 + sizeof (buf), stdin) != buf
> +  if (fgets (buf, l0 + buf_size, stdin) != buf
>        || memcmp (buf, "abcdefgh\n", 10))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (fgets (buf, sizeof (buf) + 1, stdin) != buf)
> +  if (fgets (buf, buf_size + 1, stdin) != buf)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (fgets (buf, l0 + sizeof (buf) + 1, stdin) != buf)
> +  if (fgets (buf, l0 + buf_size + 1, stdin) != buf)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
>    rewind (stdin);
>  
> -  if (fgets_unlocked (buf, sizeof (buf), stdin) != buf
> +  if (fgets_unlocked (buf, buf_size, stdin) != buf
>        || memcmp (buf, "abcdefgh\n", 10))
>      FAIL ();
> -  if (fgets_unlocked (buf, sizeof (buf), stdin) != buf
> +  if (fgets_unlocked (buf, buf_size, stdin) != buf
>        || memcmp (buf, "ABCDEFGHI", 10))
>      FAIL ();
>  
>    rewind (stdin);
>  
> -  if (fgets_unlocked (buf, l0 + sizeof (buf), stdin) != buf
> +  if (fgets_unlocked (buf, l0 + buf_size, stdin) != buf
>        || memcmp (buf, "abcdefgh\n", 10))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (fgets_unlocked (buf, sizeof (buf) + 1, stdin) != buf)
> +  if (fgets_unlocked (buf, buf_size + 1, stdin) != buf)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (fgets_unlocked (buf, l0 + sizeof (buf) + 1, stdin) != buf)
> +  if (fgets_unlocked (buf, l0 + buf_size + 1, stdin) != buf)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
>    rewind (stdin);
>  
> -  if (fread (buf, 1, sizeof (buf), stdin) != sizeof (buf)
> +  if (fread (buf, 1, buf_size, stdin) != buf_size
>        || memcmp (buf, "abcdefgh\nA", 10))
>      FAIL ();
> -  if (fread (buf, sizeof (buf), 1, stdin) != 1
> +  if (fread (buf, buf_size, 1, stdin) != 1
>        || memcmp (buf, "BCDEFGHI\na", 10))
>      FAIL ();
>  
>    rewind (stdin);
>  
> -  if (fread (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf)
> +  if (fread (buf, l0 + 1, buf_size, stdin) != buf_size
>        || memcmp (buf, "abcdefgh\nA", 10))
>      FAIL ();
> -  if (fread (buf, sizeof (buf), l0 + 1, stdin) != 1
> +  if (fread (buf, buf_size, l0 + 1, stdin) != 1
>        || memcmp (buf, "BCDEFGHI\na", 10))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (fread (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1)
> +  if (fread (buf, 1, buf_size + 1, stdin) != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (fread (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1)
> +  if (fread (buf, buf_size + 1, l0 + 1, stdin) != 1)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
>    rewind (stdin);
>  
> -  if (fread_unlocked (buf, 1, sizeof (buf), stdin) != sizeof (buf)
> +  if (fread_unlocked (buf, 1, buf_size, stdin) != buf_size
>        || memcmp (buf, "abcdefgh\nA", 10))
>      FAIL ();
> -  if (fread_unlocked (buf, sizeof (buf), 1, stdin) != 1
> +  if (fread_unlocked (buf, buf_size, 1, stdin) != 1
>        || memcmp (buf, "BCDEFGHI\na", 10))
>      FAIL ();
>  
> @@ -1047,100 +1057,100 @@ do_test (void)
>  
>    rewind (stdin);
>  
> -  if (fread_unlocked (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf)
> +  if (fread_unlocked (buf, l0 + 1, buf_size, stdin) != buf_size
>        || memcmp (buf, "abcdefgh\nA", 10))
>      FAIL ();
> -  if (fread_unlocked (buf, sizeof (buf), l0 + 1, stdin) != 1
> +  if (fread_unlocked (buf, buf_size, l0 + 1, stdin) != 1
>        || memcmp (buf, "BCDEFGHI\na", 10))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (fread_unlocked (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1)
> +  if (fread_unlocked (buf, 1, buf_size + 1, stdin) != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (fread_unlocked (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1)
> +  if (fread_unlocked (buf, buf_size + 1, l0 + 1, stdin) != 1)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
>    lseek (fileno (stdin), 0, SEEK_SET);
>  
> -  if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1
> +  if (read (fileno (stdin), buf, buf_size - 1) != buf_size - 1
>        || memcmp (buf, "abcdefgh\n", 9))
>      FAIL ();
> -  if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1
> +  if (read (fileno (stdin), buf, buf_size - 1) != buf_size - 1
>        || memcmp (buf, "ABCDEFGHI", 9))
>      FAIL ();
>  
>    lseek (fileno (stdin), 0, SEEK_SET);
>  
> -  if (read (fileno (stdin), buf, l0 + sizeof (buf) - 1) != sizeof (buf) - 1
> +  if (read (fileno (stdin), buf, l0 + buf_size - 1) != buf_size - 1
>        || memcmp (buf, "abcdefgh\n", 9))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (read (fileno (stdin), buf, sizeof (buf) + 1) != sizeof (buf) + 1)
> +  if (read (fileno (stdin), buf, buf_size + 1) != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (read (fileno (stdin), buf, l0 + sizeof (buf) + 1) != sizeof (buf) + 1)
> +  if (read (fileno (stdin), buf, l0 + buf_size + 1) != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
> -  if (pread (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2)
> -      != sizeof (buf) - 1
> +  if (pread (fileno (stdin), buf, buf_size - 1, buf_size - 2)
> +      != buf_size - 1
>        || memcmp (buf, "\nABCDEFGH", 9))
>      FAIL ();
> -  if (pread (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1
> +  if (pread (fileno (stdin), buf, buf_size - 1, 0) != buf_size - 1
>        || memcmp (buf, "abcdefgh\n", 9))
>      FAIL ();
> -  if (pread (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3)
> -      != sizeof (buf) - 1
> +  if (pread (fileno (stdin), buf, l0 + buf_size - 1, buf_size - 3)
> +      != buf_size - 1
>        || memcmp (buf, "h\nABCDEFG", 9))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (pread (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf))
> -      != sizeof (buf) + 1)
> +  if (pread (fileno (stdin), buf, buf_size + 1, 2 * buf_size)
> +      != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (pread (fileno (stdin), buf, l0 + sizeof (buf) + 1, 2 * sizeof (buf))
> -      != sizeof (buf) + 1)
> +  if (pread (fileno (stdin), buf, l0 + buf_size + 1, 2 * buf_size)
> +      != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
>  
> -  if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2)
> -      != sizeof (buf) - 1
> +  if (pread64 (fileno (stdin), buf, buf_size - 1, buf_size - 2)
> +      != buf_size - 1
>        || memcmp (buf, "\nABCDEFGH", 9))
>      FAIL ();
> -  if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1
> +  if (pread64 (fileno (stdin), buf, buf_size - 1, 0) != buf_size - 1
>        || memcmp (buf, "abcdefgh\n", 9))
>      FAIL ();
> -  if (pread64 (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3)
> -      != sizeof (buf) - 1
> +  if (pread64 (fileno (stdin), buf, l0 + buf_size - 1, buf_size - 3)
> +      != buf_size - 1
>        || memcmp (buf, "h\nABCDEFG", 9))
>      FAIL ();
>  
>  #if __USE_FORTIFY_LEVEL >= 1
>    CHK_FAIL_START
> -  if (pread64 (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf))
> -      != sizeof (buf) + 1)
> +  if (pread64 (fileno (stdin), buf, buf_size + 1, 2 * buf_size)
> +      != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  
>    CHK_FAIL_START
> -  if (pread64 (fileno (stdin), buf, l0 + sizeof (buf) + 1, 2 * sizeof (buf))
> -      != sizeof (buf) + 1)
> +  if (pread64 (fileno (stdin), buf, l0 + buf_size + 1, 2 * buf_size)
> +      != buf_size + 1)
>      FAIL ();
>    CHK_FAIL_END
>  #endif
> @@ -1178,7 +1188,7 @@ do_test (void)
>    CHK_FAIL2_END
>  
>    CHK_FAIL2_START
> -  snprintf (buf, sizeof (buf), "%3$d\n", 1, 2, 3, 4);
> +  snprintf (buf, buf_size, "%3$d\n", 1, 2, 3, 4);
>    CHK_FAIL2_END
>  
>    int sp[2];

Ok, it basically just parametrize 'sizeof (buf)'.

> diff --git a/debug/tst-chk7.c b/debug/tst-chk7.c
> new file mode 100644
> index 0000000000..2a7b323812
> --- /dev/null
> +++ b/debug/tst-chk7.c
> @@ -0,0 +1,2 @@
> +#define _FORTIFY_SOURCE 3
> +#include "tst-chk1.c"
> diff --git a/debug/tst-chk8.cc b/debug/tst-chk8.cc
> new file mode 100644
> index 0000000000..2a7b323812
> --- /dev/null
> +++ b/debug/tst-chk8.cc
> @@ -0,0 +1,2 @@
> +#define _FORTIFY_SOURCE 3
> +#include "tst-chk1.c"
> 

Ok.
  

Patch

diff --git a/debug/Makefile b/debug/Makefile
index 6893111cbf..357f888246 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -120,6 +120,8 @@  CFLAGS-tst-chk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-chk4.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-chk5.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-chk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
+CFLAGS-tst-chk7.c += -Wno-format -Wno-deprecated-declarations -Wno-error
+CFLAGS-tst-chk8.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-lfschk1.c += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-lfschk2.c += -Wno-format -Wno-deprecated-declarations -Wno-error
 CFLAGS-tst-lfschk3.c += -Wno-format -Wno-deprecated-declarations -Wno-error
@@ -129,6 +131,7 @@  CFLAGS-tst-lfschk6.cc += -Wno-format -Wno-deprecated-declarations -Wno-error
 LDLIBS-tst-chk4 = -lstdc++
 LDLIBS-tst-chk5 = -lstdc++
 LDLIBS-tst-chk6 = -lstdc++
+LDLIBS-tst-chk8 = -lstdc++
 LDLIBS-tst-lfschk4 = -lstdc++
 LDLIBS-tst-lfschk5 = -lstdc++
 LDLIBS-tst-lfschk6 = -lstdc++
@@ -150,16 +153,16 @@  CFLAGS-tst-ssp-1.c += -fstack-protector-all
 
 tests = backtrace-tst tst-longjmp_chk tst-chk1 tst-chk2 tst-chk3 \
 	tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk \
-	tst-chk4 tst-chk5 tst-chk6 tst-lfschk4 tst-lfschk5 tst-lfschk6 \
-	tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 tst-backtrace4 \
-	tst-backtrace5 tst-backtrace6
+	tst-chk4 tst-chk5 tst-chk6 tst-chk7 tst-chk8 tst-lfschk4 tst-lfschk5 \
+	tst-lfschk6 tst-longjmp_chk2 tst-backtrace2 tst-backtrace3 \
+	tst-backtrace4 tst-backtrace5 tst-backtrace6
 
 ifeq ($(have-ssp),yes)
 tests += tst-ssp-1
 endif
 
 ifeq (,$(CXX))
-tests-unsupported = tst-chk4 tst-chk5 tst-chk6 \
+tests-unsupported = tst-chk4 tst-chk5 tst-chk6 tst-chk8 \
 		    tst-lfschk4 tst-lfschk5 tst-lfschk6
 endif
 
@@ -193,6 +196,8 @@  $(objpfx)tst-chk3.out: $(gen-locales)
 $(objpfx)tst-chk4.out: $(gen-locales)
 $(objpfx)tst-chk5.out: $(gen-locales)
 $(objpfx)tst-chk6.out: $(gen-locales)
+$(objpfx)tst-chk7.out: $(gen-locales)
+$(objpfx)tst-chk8.out: $(gen-locales)
 $(objpfx)tst-lfschk1.out: $(gen-locales)
 $(objpfx)tst-lfschk2.out: $(gen-locales)
 $(objpfx)tst-lfschk3.out: $(gen-locales)
diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
index 6712770201..d11e536f87 100644
--- a/debug/tst-chk1.c
+++ b/debug/tst-chk1.c
@@ -82,8 +82,14 @@  handler (int sig)
     _exit (127);
 }
 
+#if __USE_FORTIFY_LEVEL == 3
+volatile size_t buf_size = 10;
+#else
 char buf[10];
 wchar_t wbuf[10];
+#define buf_size sizeof (buf)
+#endif
+
 volatile size_t l0;
 volatile char *p;
 volatile wchar_t *wp;
@@ -122,6 +128,10 @@  int num2 = 987654;
 static int
 do_test (void)
 {
+#if __USE_FORTIFY_LEVEL == 3
+  char *buf = (char *) malloc (buf_size);
+  wchar_t *wbuf = (wchar_t *) malloc (buf_size * sizeof (wchar_t));
+#endif
   set_fortify_handler (handler);
 
   struct A { char buf1[9]; char buf2[1]; } a;
@@ -946,93 +956,93 @@  do_test (void)
 
   rewind (stdin);
 
-  if (fgets (buf, sizeof (buf), stdin) != buf
+  if (fgets (buf, buf_size, stdin) != buf
       || memcmp (buf, "abcdefgh\n", 10))
     FAIL ();
-  if (fgets (buf, sizeof (buf), stdin) != buf || memcmp (buf, "ABCDEFGHI", 10))
+  if (fgets (buf, buf_size, stdin) != buf || memcmp (buf, "ABCDEFGHI", 10))
     FAIL ();
 
   rewind (stdin);
 
-  if (fgets (buf, l0 + sizeof (buf), stdin) != buf
+  if (fgets (buf, l0 + buf_size, stdin) != buf
       || memcmp (buf, "abcdefgh\n", 10))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (fgets (buf, sizeof (buf) + 1, stdin) != buf)
+  if (fgets (buf, buf_size + 1, stdin) != buf)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (fgets (buf, l0 + sizeof (buf) + 1, stdin) != buf)
+  if (fgets (buf, l0 + buf_size + 1, stdin) != buf)
     FAIL ();
   CHK_FAIL_END
 #endif
 
   rewind (stdin);
 
-  if (fgets_unlocked (buf, sizeof (buf), stdin) != buf
+  if (fgets_unlocked (buf, buf_size, stdin) != buf
       || memcmp (buf, "abcdefgh\n", 10))
     FAIL ();
-  if (fgets_unlocked (buf, sizeof (buf), stdin) != buf
+  if (fgets_unlocked (buf, buf_size, stdin) != buf
       || memcmp (buf, "ABCDEFGHI", 10))
     FAIL ();
 
   rewind (stdin);
 
-  if (fgets_unlocked (buf, l0 + sizeof (buf), stdin) != buf
+  if (fgets_unlocked (buf, l0 + buf_size, stdin) != buf
       || memcmp (buf, "abcdefgh\n", 10))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (fgets_unlocked (buf, sizeof (buf) + 1, stdin) != buf)
+  if (fgets_unlocked (buf, buf_size + 1, stdin) != buf)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (fgets_unlocked (buf, l0 + sizeof (buf) + 1, stdin) != buf)
+  if (fgets_unlocked (buf, l0 + buf_size + 1, stdin) != buf)
     FAIL ();
   CHK_FAIL_END
 #endif
 
   rewind (stdin);
 
-  if (fread (buf, 1, sizeof (buf), stdin) != sizeof (buf)
+  if (fread (buf, 1, buf_size, stdin) != buf_size
       || memcmp (buf, "abcdefgh\nA", 10))
     FAIL ();
-  if (fread (buf, sizeof (buf), 1, stdin) != 1
+  if (fread (buf, buf_size, 1, stdin) != 1
       || memcmp (buf, "BCDEFGHI\na", 10))
     FAIL ();
 
   rewind (stdin);
 
-  if (fread (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf)
+  if (fread (buf, l0 + 1, buf_size, stdin) != buf_size
       || memcmp (buf, "abcdefgh\nA", 10))
     FAIL ();
-  if (fread (buf, sizeof (buf), l0 + 1, stdin) != 1
+  if (fread (buf, buf_size, l0 + 1, stdin) != 1
       || memcmp (buf, "BCDEFGHI\na", 10))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (fread (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1)
+  if (fread (buf, 1, buf_size + 1, stdin) != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (fread (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1)
+  if (fread (buf, buf_size + 1, l0 + 1, stdin) != 1)
     FAIL ();
   CHK_FAIL_END
 #endif
 
   rewind (stdin);
 
-  if (fread_unlocked (buf, 1, sizeof (buf), stdin) != sizeof (buf)
+  if (fread_unlocked (buf, 1, buf_size, stdin) != buf_size
       || memcmp (buf, "abcdefgh\nA", 10))
     FAIL ();
-  if (fread_unlocked (buf, sizeof (buf), 1, stdin) != 1
+  if (fread_unlocked (buf, buf_size, 1, stdin) != 1
       || memcmp (buf, "BCDEFGHI\na", 10))
     FAIL ();
 
@@ -1047,100 +1057,100 @@  do_test (void)
 
   rewind (stdin);
 
-  if (fread_unlocked (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf)
+  if (fread_unlocked (buf, l0 + 1, buf_size, stdin) != buf_size
       || memcmp (buf, "abcdefgh\nA", 10))
     FAIL ();
-  if (fread_unlocked (buf, sizeof (buf), l0 + 1, stdin) != 1
+  if (fread_unlocked (buf, buf_size, l0 + 1, stdin) != 1
       || memcmp (buf, "BCDEFGHI\na", 10))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (fread_unlocked (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1)
+  if (fread_unlocked (buf, 1, buf_size + 1, stdin) != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (fread_unlocked (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1)
+  if (fread_unlocked (buf, buf_size + 1, l0 + 1, stdin) != 1)
     FAIL ();
   CHK_FAIL_END
 #endif
 
   lseek (fileno (stdin), 0, SEEK_SET);
 
-  if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1
+  if (read (fileno (stdin), buf, buf_size - 1) != buf_size - 1
       || memcmp (buf, "abcdefgh\n", 9))
     FAIL ();
-  if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1
+  if (read (fileno (stdin), buf, buf_size - 1) != buf_size - 1
       || memcmp (buf, "ABCDEFGHI", 9))
     FAIL ();
 
   lseek (fileno (stdin), 0, SEEK_SET);
 
-  if (read (fileno (stdin), buf, l0 + sizeof (buf) - 1) != sizeof (buf) - 1
+  if (read (fileno (stdin), buf, l0 + buf_size - 1) != buf_size - 1
       || memcmp (buf, "abcdefgh\n", 9))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (read (fileno (stdin), buf, sizeof (buf) + 1) != sizeof (buf) + 1)
+  if (read (fileno (stdin), buf, buf_size + 1) != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (read (fileno (stdin), buf, l0 + sizeof (buf) + 1) != sizeof (buf) + 1)
+  if (read (fileno (stdin), buf, l0 + buf_size + 1) != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 #endif
 
-  if (pread (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2)
-      != sizeof (buf) - 1
+  if (pread (fileno (stdin), buf, buf_size - 1, buf_size - 2)
+      != buf_size - 1
       || memcmp (buf, "\nABCDEFGH", 9))
     FAIL ();
-  if (pread (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1
+  if (pread (fileno (stdin), buf, buf_size - 1, 0) != buf_size - 1
       || memcmp (buf, "abcdefgh\n", 9))
     FAIL ();
-  if (pread (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3)
-      != sizeof (buf) - 1
+  if (pread (fileno (stdin), buf, l0 + buf_size - 1, buf_size - 3)
+      != buf_size - 1
       || memcmp (buf, "h\nABCDEFG", 9))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (pread (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf))
-      != sizeof (buf) + 1)
+  if (pread (fileno (stdin), buf, buf_size + 1, 2 * buf_size)
+      != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (pread (fileno (stdin), buf, l0 + sizeof (buf) + 1, 2 * sizeof (buf))
-      != sizeof (buf) + 1)
+  if (pread (fileno (stdin), buf, l0 + buf_size + 1, 2 * buf_size)
+      != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 #endif
 
-  if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 2)
-      != sizeof (buf) - 1
+  if (pread64 (fileno (stdin), buf, buf_size - 1, buf_size - 2)
+      != buf_size - 1
       || memcmp (buf, "\nABCDEFGH", 9))
     FAIL ();
-  if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1
+  if (pread64 (fileno (stdin), buf, buf_size - 1, 0) != buf_size - 1
       || memcmp (buf, "abcdefgh\n", 9))
     FAIL ();
-  if (pread64 (fileno (stdin), buf, l0 + sizeof (buf) - 1, sizeof (buf) - 3)
-      != sizeof (buf) - 1
+  if (pread64 (fileno (stdin), buf, l0 + buf_size - 1, buf_size - 3)
+      != buf_size - 1
       || memcmp (buf, "h\nABCDEFG", 9))
     FAIL ();
 
 #if __USE_FORTIFY_LEVEL >= 1
   CHK_FAIL_START
-  if (pread64 (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf))
-      != sizeof (buf) + 1)
+  if (pread64 (fileno (stdin), buf, buf_size + 1, 2 * buf_size)
+      != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 
   CHK_FAIL_START
-  if (pread64 (fileno (stdin), buf, l0 + sizeof (buf) + 1, 2 * sizeof (buf))
-      != sizeof (buf) + 1)
+  if (pread64 (fileno (stdin), buf, l0 + buf_size + 1, 2 * buf_size)
+      != buf_size + 1)
     FAIL ();
   CHK_FAIL_END
 #endif
@@ -1178,7 +1188,7 @@  do_test (void)
   CHK_FAIL2_END
 
   CHK_FAIL2_START
-  snprintf (buf, sizeof (buf), "%3$d\n", 1, 2, 3, 4);
+  snprintf (buf, buf_size, "%3$d\n", 1, 2, 3, 4);
   CHK_FAIL2_END
 
   int sp[2];
diff --git a/debug/tst-chk7.c b/debug/tst-chk7.c
new file mode 100644
index 0000000000..2a7b323812
--- /dev/null
+++ b/debug/tst-chk7.c
@@ -0,0 +1,2 @@ 
+#define _FORTIFY_SOURCE 3
+#include "tst-chk1.c"
diff --git a/debug/tst-chk8.cc b/debug/tst-chk8.cc
new file mode 100644
index 0000000000..2a7b323812
--- /dev/null
+++ b/debug/tst-chk8.cc
@@ -0,0 +1,2 @@ 
+#define _FORTIFY_SOURCE 3
+#include "tst-chk1.c"