From: Thomas Huth <thuth@redhat.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Eric Biggers <ebiggers@kernel.org>,
"Jason A. Donenfeld" <Jason@zx2c4.com>,
Ard Biesheuvel <ardb@kernel.org>,
Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH 10/11] x86/purgatory: Compile purgatory.c with -D__NO_FORTIFY
Date: Tue, 18 Aug 2026 10:53:53 +0200 [thread overview]
Message-ID: <7d373eca-c23c-4f79-9391-29d75bd5a53f@redhat.com> (raw)
In-Reply-To: <20260814152457.GBan8zSeYlWd_1oWkz@fat_crate.local>
On 14/08/2026 17.24, Borislav Petkov wrote:
> On Thu, Aug 13, 2026 at 03:49:48PM +0200, Thomas Huth wrote:
>> From: Thomas Huth <thuth@redhat.com>
>>
>> purgatory.c includes both, the <crypto/sha2.h> header and the
>> arch/x86/boot/string.h header. The latter provides its own prototypes
>> for a lot of string functions which clash with the fortified macros
>> from <linux/string.h>.
>> The next patch will add #include <linux/string.h> to sha2.h to be able
>
> This is exactly the problem - people are adding main include namespace headers
> from linux/ to arch/x86/boot, or, as you do, to purgatory, which are special
> - and then they have to do all kinds of hacks so that it builds.
>
> (btw, there's no "next patch" in git history).
>
>> to use memzero_explicit() there, so we have to compile the code in
>> purgatory.c with -D__NO_FORTIFY to avoid compilation problems in this
>> file.
>
> How about you extract memzero_explicit() to a separate header in
> include/asm-generic/ or simply put it in include/asm-generic/string.h and then
> use that header instead?
>
> Then you shouldn't have prototype clashes...
>
> It does sound cleaner to me but you'd have to try it to see whether it
> actually works.
Thanks for the suggestion, I gave it a try, but I only ended up with another
huger ugliness this way: Since memzero_explicit() needs memset(), that
memset() has to be declared somewhere. Since I cannot include
<linux/string.h> from the file where I put memzero_explicit(), we would need
to make sure that all files that want to use <crypto/sha2.h> include either
<linux/string.h> or arch/x86/boot/string.h or whatever before including
sha2.h - i.e. this creates a likely unacceptable indirect dependency of
sha2.h on including a string.h header first.
Adding the -D__NO_FORTIFY to the purgatory Makefile sounds like the lesser
of the two evils to me, especially since there is already another line in
that Makefile that adds -D__NO_FORTIFY to one of the other files there:
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
Maybe I should rather change the patch to add -D__NO_FORTIFY unconditionally
to generic PURGATORY_CFLAGS there? Something like:
diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
--- a/arch/x86/purgatory/Makefile
+++ b/arch/x86/purgatory/Makefile
@@ -11,7 +11,7 @@ $(obj)/string.o:
$(srctree)/arch/x86/boot/compressed/string.c FORCE
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
$(call if_changed_rule,cc_o_c)
-CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
+CFLAGS_sha256.o := -D__DISABLE_EXPORTS
# When profile-guided optimization is enabled, llvm emits two different
# overlapping text sections, which is not supported by kexec. Remove profile
@@ -37,6 +37,7 @@ PURGATORY_CFLAGS := -mcmodel=small -ffreestanding
-fno-zero-initialized-in-bss -
PURGATORY_CFLAGS += -fpic -fvisibility=hidden
PURGATORY_CFLAGS += $(DISABLE_KSTACK_ERASE) -DDISABLE_BRANCH_PROFILING
PURGATORY_CFLAGS += -fno-stack-protector
+PURGATORY_CFLAGS += -D__NO_FORTIFY
# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
# in turn leaves some undefined symbols like __fentry__ in purgatory and not
WDYT?
Thomas
next prev parent reply other threads:[~2026-08-18 8:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 13:49 [PATCH 00/11] libcrypto: Provide more __cleanup functions for zeroizing data Thomas Huth
2026-08-13 13:49 ` [PATCH 01/11] lib/crypto: aes: Provide a wrapper function for zeroizing crypto_aes_ctx Thomas Huth
2026-08-13 13:49 ` [PATCH 02/11] crypto: safexcel - Simplify the check for a valid AES key Thomas Huth
2026-08-13 13:49 ` [PATCH 03/11] crypto: safexcel - zeroize crypto_aes_ctx with __cleanup(aes_zeroize_ctx) Thomas Huth
2026-08-13 13:49 ` [PATCH 04/11] lib/crypto: aes: Provide functions for zeroizing aes_key and aes_enckey Thomas Huth
2026-08-13 13:49 ` [PATCH 05/11] lib/crypto: aes: Use aes_zeroize_*key() instead of memzero_explicit() Thomas Huth
2026-08-13 13:49 ` [PATCH 06/11] lib/crypto: md5: Provide a function for zeroizing hmac_md5_ctx structures Thomas Huth
2026-08-13 13:49 ` [PATCH 07/11] lib/crypto: md5: Use hmac_md5_zeroize_ctx() instead of memzero_explicit() Thomas Huth
2026-08-13 13:49 ` [PATCH 08/11] lib/crypto: sha1: Provide a wrapper for zeroizing hmac_sha1_ctx Thomas Huth
2026-08-13 13:49 ` [PATCH 09/11] lib/crypto: sha1: Use hmac_sha1_zeroize_ctx() instead of memzero_explicit() Thomas Huth
2026-08-13 13:49 ` [PATCH 10/11] x86/purgatory: Compile purgatory.c with -D__NO_FORTIFY Thomas Huth
2026-08-14 15:24 ` Borislav Petkov
2026-08-18 8:53 ` Thomas Huth [this message]
2026-09-16 2:27 ` Borislav Petkov
2026-09-16 10:42 ` Thomas Huth
2026-09-16 10:24 ` Ard Biesheuvel
2026-08-13 13:49 ` [PATCH 11/11] lib/crypto: sha2: Provide wrappers for zeroizing SHA2 hmac_sha*_ctx structures Thomas Huth
2026-09-01 0:12 ` [PATCH 00/11] libcrypto: Provide more __cleanup functions for zeroizing data Eric Biggers
2026-09-01 16:53 ` Eric Biggers
2026-09-07 14:01 ` Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7d373eca-c23c-4f79-9391-29d75bd5a53f@redhat.com \
--to=thuth@redhat.com \
--cc=Jason@zx2c4.com \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=ebiggers@kernel.org \
--cc=herbert@gondor.apana.org.au \
--cc=hpa@zytor.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.