[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 0/3] Add stack protector
On 14.01.2025 14:28, Andrew Cooper wrote: > On 14/01/2025 1:22 pm, Jan Beulich wrote: >> On 12.12.2024 02:17, Andrew Cooper wrote: >>> On 12/12/2024 12:13 am, Volodymyr Babchuk wrote: >>>> Hello Jan, >>>> >>>> Jan Beulich <jbeulich@xxxxxxxx> writes: >>>> >>>>> On 11.12.2024 03:04, Volodymyr Babchuk wrote: >>>>>> Both GCC and Clang support -fstack-protector feature, which add stack >>>>>> canaries to functions where stack corruption is possible. This series >>>>>> makes possible to use this feature in Xen. I tested this on ARM64 and >>>>>> it is working as intended. Tested both with GCC and Clang. >>>>>> >>>>>> It is hard to enable this feature on x86, as GCC stores stack canary >>>>>> in %fs:40 by default, but Xen can't use %fs for various reasons. It is >>>>>> possibly to change stack canary location new newer GCC versions, but >>>>>> this will change minimal GCC requirement, which is also hard due to >>>>>> various reasons. So, this series focus mostly on ARM and RISCV. >>>>> Why exactly would it not be possible to offer the feature when new enough >>>>> gcc is in use? >>>> It is possible to use this feature with a modern enough GCC, yes. Are >>>> you suggesting to make HAS_STACK_PROTECTOR dependent on GCC_VERSION for >>>> x86 platform? >>> (With the knowledge that this is a disputed Kconfig pattern, and will >>> need rebasing), the way I want this to work is simply: >>> >>> diff --git a/xen/Makefile b/xen/Makefile >>> index 0de0101fd0bf..5d0a88fb3c3f 100644 >>> --- a/xen/Makefile >>> +++ b/xen/Makefile >>> @@ -434,6 +434,9 @@ endif >>> >>> ifeq ($(CONFIG_STACK_PROTECTOR),y) >>> CFLAGS += -fstack-protector >>> +ifeq ($(CONFIG_X86),y) >>> +CFLAGS += -mstack-protector-guard=global >>> +endif >>> else >>> CFLAGS += -fno-stack-protector >>> endif >>> diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig >>> index 9cdd04721afa..7951ca908b36 100644 >>> --- a/xen/arch/x86/Kconfig >>> +++ b/xen/arch/x86/Kconfig >>> @@ -28,6 +28,7 @@ config X86 >>> select HAS_PCI_MSI >>> select HAS_PIRQ >>> select HAS_SCHED_GRANULARITY >>> + select HAS_STACK_PROTECTOR if >>> $(cc-option,-mstack-protector-guard=global) >>> select HAS_UBSAN >>> select HAS_VMAP >>> select HAS_VPCI if HVM >>> >>> >>> >>> Sadly, it doesn't build. I get a handful of: >>> >>> prelink.o: in function `cmdline_parse': >>> /home/andrew/xen.git/xen/common/kernel.c:216:(.init.text+0x20f2): failed >>> to convert GOTPCREL relocation against '__stack_chk_guard'; relink with >>> --no-relax >>> /home/andrew/xen.git/xen/common/kernel.c:230:(.init.text+0x246f): failed >>> to convert GOTPCREL relocation against '__stack_chk_guard'; relink with >>> --no-relax >>> >>> which is more toolchain-whispering than I feel like doing tonight. >> For reference: >> https://sourceware.org/pipermail/binutils/2025-January/138631.html >> >> You didn't enter a gcc bug report yet, did you? > > No, not yet. I'm afraid I've not had the time. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118473 Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |