On 2022-11-27 03:27, Simon Josefsson via Gnulib discussion list wrote:
1) Does gnulib support building with gcc -std=c99? I think we should, but it could have documented missing functionality or breakage.
It should, yes. That's a reasonable portability test, so long as Gnulib continues to support C99.
2) It seems explicit_bzero.c in gnulib fall backs to using 'asm' for GCC, which isn't working in non-GNU modes of gcc. Further wondering:
I hope I fixed this particular problem by installing the attached. Perhaps Gnulib's other uses of asm should also be changed?
1) The reason for having explicit_bzero is read_file, which needs it for reading sensitive files, a feature we don't use. Uncoupling this unnecessary dependency would have been nice.
In the long run it should be OK; see below.
2) Is there no other way to implement explicit_bzero without 'asm'? There is a another fallback code using volatile pointers, but I'm not sure it really has the same semantics.
That fallback should work, though it's a bit slower.
3) Is there a way to detect if the compiler supports 'asm'? The current test 'defined __GNUC__ && !defined __clang__' is what is really failing here.
We could add a configure-time test. Not sure it's worth the hassle.
3) Is the idiom of using separate functions bzero() vs explicit_bzero() to avoid security-problematic compiler optimization still a good one?
Yes, though we should switch to memset_explicit as that's the name C23 has standardized on. I.e., create a memset_explicit module, have other modules use that instead of explicit_bzero. No rush, but that's the way to proceed.
From 04191d1b325186fcd788a4a0a89274f8b9a9943b Mon Sep 17 00:00:00 2001 From: Paul Eggert <egg...@cs.ucla.edu> Date: Sun, 27 Nov 2022 09:59:32 -0800 Subject: [PATCH] explicit_bzero: work with gcc -std=c99 * lib/explicit_bzero.c (explicit_bzero) [__GNUC__ && !__clang__]: Use __asm__ instead of asm. --- ChangeLog | 6 ++++++ lib/explicit_bzero.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 36825874d2..eedab2ae83 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-11-27 Paul Eggert <egg...@cs.ucla.edu> + + explicit_bzero: work with gcc -std=c99 + * lib/explicit_bzero.c (explicit_bzero) [__GNUC__ && !__clang__]: + Use __asm__ instead of asm. + 2022-11-26 Paul Eggert <egg...@cs.ucla.edu> Prefer "kill -INT" to killing with a number diff --git a/lib/explicit_bzero.c b/lib/explicit_bzero.c index ad0bfd170c..584f982924 100644 --- a/lib/explicit_bzero.c +++ b/lib/explicit_bzero.c @@ -57,7 +57,7 @@ explicit_bzero (void *s, size_t len) #elif defined __GNUC__ && !defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ - asm volatile ("" ::: "memory"); + __asm__ volatile ("" ::: "memory"); #elif defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ -- 2.37.2