diff --git a/meson.build b/meson.build index 0ef1654e86..c59ca496f2 100644 --- a/meson.build +++ b/meson.build @@ -555,17 +555,24 @@ endif # Check further flags that make QEMU more robust against malicious parties hardening_flags = [ - # Zero out registers used during a function call - # upon its return. This makes it harder to assemble - # ROP gadgets into something usable - '-fzero-call-used-regs=used-gpr', - # Initialize all stack variables to zero. This makes # it harder to take advantage of uninitialized stack # data to drive exploits '-ftrivial-auto-var-init=zero', ] +# Zero out registers used during a function call +# upon its return. This makes it harder to assemble +# ROP gadgets into something usable +# +# NB: Clang 17 is broken and SEGVs +# https://github.com/llvm/llvm-project/issues/75168 +if cc.compiles('extern struct { void (*cb)(void); } s; void f(void) { s.cb(); }', + name: '-fzero-call-used-regs=used-gpr', + args: ['-O2', '-fzero-call-used-regs=used-gpr']) + hardening_flags += '-fzero-call-used-regs=used-gpr' +endif + qemu_common_flags += cc.get_supported_arguments(hardening_flags) add_global_arguments(qemu_common_flags, native: false, language: all_languages)