Skip to contentSkip to conversation

randstruct: disable Clang 15 support

PATCH Applied Eric Biggers 5 participants 5 messages Feb 8, 2023

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 randstruct: disable Clang 15 support

From: Eric Biggers <[email protected]>

The randstruct support released in Clang 15 is unsafe to use due to a bug that can cause miscompilations: "-frandomize-layout-seed inconsistently randomizes all-function-pointers structs"
(https://github.com/llvm/llvm-project/issues/60349). It has been fixed on the Clang 16 release branch, so add a Clang version check.

Fixes 035f7f87b729 ("randstruct: Enable Clang support")
---
 security/Kconfig.hardening | 3 +++
 1 file changed, 3 insertions(+)
security/Kconfig.hardening +3 -0
index 53baa95cb644f..0f295961e7736 100644
@@ -281,6 +281,9 @@ endmenu
 
 config CC_HAS_RANDSTRUCT
 	def_bool $(cc-option,-frandomize-layout-seed-file=/dev/null)
+	# Randstruct was first added in Clang 15, but it isn't safe to use until
+	# Clang 16 due to https://github.com/llvm/llvm-project/issues/60349
+	depends on !CC_IS_CLANG || CLANG_VERSION >= 160000
 
 choice
 	prompt "Randomize layout of sensitive kernel structures"

base-commit: 4ec5183ec48656cec489c49f989c508b68b518e3

Signature · 1 line
2.39.1
Reviewed-by on v1 1/1
#1 lore raw
Quoted 11 lines · Eric Biggers

From: Eric Biggers <[email protected]>

The randstruct support released in Clang 15 is unsafe to use due to a bug that can cause miscompilations: "-frandomize-layout-seed inconsistently randomizes all-function-pointers structs"
(https://github.com/llvm/llvm-project/issues/60349). It has been fixed on the Clang 16 release branch, so add a Clang version check.

Fixes 035f7f87b729 ("randstruct: Enable Clang support")
Quoted 24 lines
---
 security/Kconfig.hardening | 3 +++
 1 file changed, 3 insertions(+)
security/Kconfig.hardening +3 -0
index 53baa95cb644f..0f295961e7736 100644
@@ -281,6 +281,9 @@ endmenu
 
 config CC_HAS_RANDSTRUCT
 	def_bool $(cc-option,-frandomize-layout-seed-file=/dev/null)
+	# Randstruct was first added in Clang 15, but it isn't safe to use until
+	# Clang 16 due to https://github.com/llvm/llvm-project/issues/60349
+	depends on !CC_IS_CLANG || CLANG_VERSION >= 160000
 
 choice
 	prompt "Randomize layout of sensitive kernel structures"

base-commit: 4ec5183ec48656cec489c49f989c508b68b518e3

Signature · 1 line
2.39.1
Reviewed-by
#2 lore raw
Quoted 10 lines · Nathan Chancellor
Quoted 8 lines · Eric Biggers

From: Eric Biggers <[email protected]>

The randstruct support released in Clang 15 is unsafe to use due to a bug that can cause miscompilations: "-frandomize-layout-seed inconsistently randomizes all-function-pointers structs"
(https://github.com/llvm/llvm-project/issues/60349). It has been fixed on the Clang 16 release branch, so add a Clang version check.

Quoted 6 lines
Quoted 3 lines
Fixes 035f7f87b729 ("randstruct: Enable Clang support")
Quoted 24 lines
Quoted 24 lines
---
 security/Kconfig.hardening | 3 +++
 1 file changed, 3 insertions(+)
security/Kconfig.hardening +3 -0
index 53baa95cb644f..0f295961e7736 100644
@@ -281,6 +281,9 @@ endmenu
 
 config CC_HAS_RANDSTRUCT
      def_bool $(cc-option,-frandomize-layout-seed-file=/dev/null)
+     # Randstruct was first added in Clang 15, but it isn't safe to use until
+     # Clang 16 due to https://github.com/llvm/llvm-project/issues/60349
+     depends on !CC_IS_CLANG || CLANG_VERSION >= 160000
 
 choice
      prompt "Randomize layout of sensitive kernel structures"

base-commit: 4ec5183ec48656cec489c49f989c508b68b518e3 --
2.39.1

Acked-by on v1 1/1
#3 lore raw
In reply to Eric Biggers
Quoted 9 lines · Eric Biggers

From: Eric Biggers <[email protected]>

The randstruct support released in Clang 15 is unsafe to use due to a bug that can cause miscompilations: "-frandomize-layout-seed inconsistently randomizes all-function-pointers structs"
(https://github.com/llvm/llvm-project/issues/60349). It has been fixed on the Clang 16 release branch, so add a Clang version check.

Quoted 3 lines
Fixes 035f7f87b729 ("randstruct: Enable Clang support")

Thanks for the patch and report. Guessing that wasn't fun to debug.

Quoted 24 lines
---
 security/Kconfig.hardening | 3 +++
 1 file changed, 3 insertions(+)
security/Kconfig.hardening +3 -0
index 53baa95cb644f..0f295961e7736 100644
@@ -281,6 +281,9 @@ endmenu
 
 config CC_HAS_RANDSTRUCT
        def_bool $(cc-option,-frandomize-layout-seed-file=/dev/null)
+       # Randstruct was first added in Clang 15, but it isn't safe to use until
+       # Clang 16 due to https://github.com/llvm/llvm-project/issues/60349
+       depends on !CC_IS_CLANG || CLANG_VERSION >= 160000
 
 choice
        prompt "Randomize layout of sensitive kernel structures"

base-commit: 4ec5183ec48656cec489c49f989c508b68b518e3 --
2.39.1

Signature · 2 lines
Thanks,
~Nick Desaulniers
Applied
#4 lore raw
In reply to Eric Biggers
Quoted 9 lines · Eric Biggers

From: Eric Biggers <[email protected]>

The randstruct support released in Clang 15 is unsafe to use due to a bug that can cause miscompilations: "-frandomize-layout-seed inconsistently randomizes all-function-pointers structs"
(https://github.com/llvm/llvm-project/issues/60349). It has been fixed on the Clang 16 release branch, so add a Clang version check.

[...]

Applied to for-next/hardening, thanks!

[1/1] randstruct: disable Clang 15 support

      https://git.kernel.org/kees/c/7ee3819f2ba9
Signature · 1 line
Kees Cook