[PATCH gnupg v3] Disable CPU speculation-related misfeatures
Guido Trentalancia
guido at trentalancia.com
Fri Jul 4 16:00:49 CEST 2025
I have reformatted the commit log according to the gnupg coding style
as in gnupg/doc/HACKING and created a v3 patch which follows.
common: Disable CPU speculation-related misfeatures
* common/init.c (early_system_init): Disable CPU
speculation-related misfeatures which are in fact
vulnerabilities causing data leaks:
- Speculative Store Bypass
- Indirect Branch Speculation
- Flush L1D Cache on context switch out of the task
For further information see the kernel documentation:
Documentation/userspace-api/spec_ctrl.rst
Signed-off-by: Guido Trentalancia <guido at trentalancia.com>
diff -pru a/common/init.c b/common/init.c
--- a/common/init.c 2024-05-15 12:33:38.000000000 +0200
+++ b/common/init.c 2025-06-27 12:35:33.543235132 +0200
@@ -29,6 +29,10 @@
#include <config.h>
+#if defined(__linux__)
+# include <sys/prctl.h>
+#endif
+
#ifdef HAVE_W32_SYSTEM
# if _WIN32_WINNT < 0x0600
# define _WIN32_WINNT 0x0600 /* Required for SetProcessDEPPolicy. */
@@ -131,6 +135,29 @@ writestring_via_estream (int mode, const
void
early_system_init (void)
{
+#if defined(__linux__)
+
+/* Disable CPU speculation-related misfeatures which are in
+ * fact vulnerabilities causing data leaks: see the kernel
+ * documentation: Documentation/userspace-api/spec_ctrl.rst
+ *
+ * - Speculative Store Bypass
+ * - Indirect Branch Speculation
+ * - Flush L1D Cache on context switch out of the task
+ */
+#ifdef PR_SPEC_STORE_BYPASS
+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_FORCE_DISABLE, 0, 0);
+#endif
+
+#ifdef PR_SPEC_INDIRECT_BRANCH
+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_FORCE_DISABLE, 0, 0);
+#endif
+
+#ifdef PR_SPEC_L1D_FLUSH
+ prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_L1D_FLUSH, PR_SPEC_FORCE_DISABLE, 0, 0);
+#endif
+
+#endif /* __linux__ */
}
On Thu, 03/07/2025 at 09.24 +0200, Werner Koch wrote:
> Hi!
>
> I and other already explained that the way you propose the patches is
> not acceptable:
>
> - No autoconf macros and possibly tests to decide whether to use the
> feature.
>
> - No proper ChangeLog (see gnupg/doc/HACKING)
>
>
>
> Shalom-Salam,
>
> Werner
>
More information about the Gnupg-devel
mailing list