LLVM Drops Its Shadow Call Stack Support For x86_64
LLVM for a while has offered a "Shadow Call Stack" pass used to protect programs against stack buffer overflows. While the 64-bit ARM (AArch64) shadow call stack has worked out well, the x86_64 implementation has been deemed insufficient and is now removed.
The x86_64 LLVM Shadow Call Stack was found to regress performance too much and have security weaknesses so it was expected to be removed while now it's finally happened. The AArch64 LLVM ShadowCallStack pass will continue to be supported by the x86_64 version has been removed in LLVM 9.
Those interested in learning more about the design intentions of the shadow call stack and its relevance still for AArch64 can be found via the LLVM documentation.
The x86_64 LLVM Shadow Call Stack was found to regress performance too much and have security weaknesses so it was expected to be removed while now it's finally happened. The AArch64 LLVM ShadowCallStack pass will continue to be supported by the x86_64 version has been removed in LLVM 9.
Delete x86_64 ShadowCallStack support
Summary:
ShadowCallStack on x86_64 suffered from the same racy security issues as Return Flow Guard and had performance overhead as high as 13% depending on the benchmark. x86_64 ShadowCallStack was always an experimental feature and never shipped a runtime required to support it, as such there are no expected downstream users.
Those interested in learning more about the design intentions of the shadow call stack and its relevance still for AArch64 can be found via the LLVM documentation.
Add A Comment