From: Gary Lin Date: Wed, 22 Oct 2025 01:28:56 +0000 (+0800) Subject: libgcrypt: Implement _gcry_get_hw_features() X-Git-Tag: grub-2.14-rc1~38 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0ff5faf8cd1a2bd9bda60620a1701b5da48ad803;p=thirdparty%2Fgrub.git libgcrypt: Implement _gcry_get_hw_features() Implement _gcry_get_hw_features() and enable hardware feature detection for x86_64. Signed-off-by: Gary Lin Reviewed-by: Daniel Kiper --- diff --git a/autogen.sh b/autogen.sh index 7ff90cb93..7dd26cd33 100755 --- a/autogen.sh +++ b/autogen.sh @@ -59,6 +59,10 @@ for x in sha256-ssse3-amd64.S sha256-avx-amd64.S sha256-avx2-bmi2-amd64.S sha256 cp grub-core/lib/libgcrypt/cipher/"$x" grub-core/lib/libgcrypt-grub/cipher/"$x" done +if [ -f grub-core/lib/libgcrypt-grub/src/hwfeatures.c ]; then + rm grub-core/lib/libgcrypt-grub/src/hwfeatures.c +fi + for x in grub-core/lib/libgcrypt-patches/*.patch; do patch -i $x -p1 done diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist index 48c2b75f8..7c5afe680 100644 --- a/conf/Makefile.extra-dist +++ b/conf/Makefile.extra-dist @@ -47,6 +47,7 @@ EXTRA_DIST += grub-core/lib/libgcrypt-patches/09-blake2b-hash-buffers.patch EXTRA_DIST += grub-core/lib/libgcrypt-patches/10-kdf-use-GPG-errs.patch EXTRA_DIST += grub-core/lib/libgcrypt-patches/11-kdf-remove-unsupported-kdfs.patch EXTRA_DIST += grub-core/lib/libgcrypt-patches/12-kdf-use-grub_divmod64.patch +EXTRA_DIST += grub-core/lib/libgcrypt-patches/13_add_hwfeatures.patch EXTRA_DIST += grub-core/lib/libtasn1-patches/0001-libtasn1-disable-code-not-needed-in-grub.patch EXTRA_DIST += grub-core/lib/libtasn1-patches/0002-libtasn1-replace-strcat-with-strcpy-in-_asn1_str_cat.patch diff --git a/grub-core/lib/libgcrypt-patches/13_add_hwfeatures.patch b/grub-core/lib/libgcrypt-patches/13_add_hwfeatures.patch new file mode 100644 index 000000000..1360b666e --- /dev/null +++ b/grub-core/lib/libgcrypt-patches/13_add_hwfeatures.patch @@ -0,0 +1,87 @@ +From 4403c452240417aaac7d3120c80b1325b7218768 Mon Sep 17 00:00:00 2001 +From: Gary Lin +Date: Fri, 18 Jul 2025 15:21:51 +0800 +Subject: [PATCH 1/4] libgcrypt: Implement _gcry_get_hw_features() + +Implement _gcry_get_hw_features() and enable hardware feature detection +for x86_64. + +Signed-off-by: Gary Lin +--- + grub-core/Makefile.gcry.def | 8 ++++ + grub-core/lib/libgcrypt-grub/src/hwfeatures.c | 47 +++++++++++++++++++ + 2 files changed, 55 insertions(+) + create mode 100644 grub-core/lib/libgcrypt-grub/src/hwfeatures.c + +diff --git a/grub-core/Makefile.gcry.def b/grub-core/Makefile.gcry.def +index a0593fa09..c8caf17dc 100644 +--- a/grub-core/Makefile.gcry.def ++++ b/grub-core/Makefile.gcry.def +@@ -226,3 +226,11 @@ module = { + cppflags = '$(CPPFLAGS_GCRY)'; + }; + ++module = { ++ name = gcry_hwfeatures; ++ common = lib/libgcrypt-grub/src/hwfeatures.c; ++ x86_64_efi = lib/libgcrypt-grub/src/hwf-x86.c; ++ ++ cflags = '$(CFLAGS_GCRY)'; ++ cppflags = '$(CPPFLAGS_GCRY) $(CPPFLAGS_GCRY_ASM)'; ++}; +diff --git a/grub-core/lib/libgcrypt-grub/src/hwfeatures.c b/grub-core/lib/libgcrypt-grub/src/hwfeatures.c +new file mode 100644 +index 000000000..4d744f8ec +--- /dev/null ++++ b/grub-core/lib/libgcrypt-grub/src/hwfeatures.c +@@ -0,0 +1,47 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2025 Free Software Foundation, Inc. ++ * ++ * GRUB is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB. If not, see . ++ */ ++ ++#include ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++#include ++#include ++#include "hwf-common.h" ++ ++unsigned int ++_gcry_get_hw_features (void) ++{ ++ static bool detected = false; ++ static unsigned int hw_features = 0; ++ ++ if (grub_gcry_hwf_enabled () == false) ++ return 0; ++ ++ if (detected == true) ++ return hw_features; ++ ++#if defined (__x86_64__) && defined (GRUB_MACHINE_EFI) ++ hw_features = _gcry_hwf_detect_x86 (); ++#endif ++ ++ grub_dprintf ("hwfeatures", "Detected features: 0x%x\n", hw_features); ++ ++ detected = true; ++ ++ return hw_features; ++} +-- +2.51.0 + diff --git a/include/grub/crypto.h b/include/grub/crypto.h index 68f5c10c3..f80ed25bb 100644 --- a/include/grub/crypto.h +++ b/include/grub/crypto.h @@ -626,11 +626,14 @@ _gcry_ct_memequal (const void *b1, const void *b2, grub_size_t len); unsigned int _gcry_ct_not_memequal (const void *b1, const void *b2, grub_size_t len); - -static inline unsigned int _gcry_get_hw_features(void) +#if defined (GRUB_UTIL) +static inline unsigned int _gcry_get_hw_features (void) { return 0; } +#else +extern unsigned int _gcry_get_hw_features (void); +#endif void *_gcry_malloc(grub_size_t n); void *_gcry_malloc_secure(grub_size_t n);