criu/compel/include
Pratyush Yadav ca971b7f8b compel: fix build on Amazon Linux 2 due to missing PTRACE_ARCH_PRCTL
Commit fc683cb01 ("compel: shstk: save CET state when CPU supports it")
started using PTRACE_ARCH_PRCTL to query shadow stack status. While
PTRACE_ARCH_PRCTL has existed in the kernel for a long time, it was only
added to glibc in version 2.27. Amazon Linux 2 (AL2) has glibc 2.26,
which does not have this definition. As a result, build on AL2 fails
with the below error:

    compel/arch/x86/src/lib/infect.c: In function ‘get_task_xsave’:
    compel/arch/x86/src/lib/infect.c:276:14: error: ‘PTRACE_ARCH_PRCTL’ undeclared (first use in this function)
    276 |   if (ptrace(PTRACE_ARCH_PRCTL, pid, (unsigned long)&features, ARCH_SHSTK_STATUS)) {
        |              ^~~~~~~~~~~~~~~~~

While the definition is present on the system via the kernel headers (in
asm/ptrace-abi.h) which can be reached by including linux/ptrace.h, the
comment in compel/include/uapi/ptrace.h says:

    We'd want to include both sys/ptrace.h and linux/ptrace.h, hoping
    that most definitions come from either one or another. Alas, on
    Alpine/musl both files declare struct ptrace_peeksiginfo_args, so
    there is no way they can be used together. Let's rely on libc one.

Since including linux/ptrace.h is not an option, define
PTRACE_ARCH_PRCTL if it doesn't already exist. An interesting point to
note is that in sys/ptrace.h, PTRACE_ARCH_PRCTL is an enum value so the
preprocessor doesn't know about it. PT_ARCH_PRCTL is the preprocessor
symbol that matches the value of PTRACE_ARCH_PRCTL. So look for
PT_ARCH_PRCTL to decide if PTRACE_ARCH_PRCTL is available or not.

Another interesting point to note is that AL2 ships with GCC 7 by
default, which does not support the -mshstk option, causing other build
failures. Luckily, it also ships GCC 10 which does have the option.
Using GCC 10 lets the build succeed.

Fixes: fc683cb01 ("compel: shstk: save CET state when CPU supports it")
Signed-off-by: Pratyush Yadav <ptyadav@amazon.de>
2024-09-11 16:02:11 -07:00
..
uapi compel: fix build on Amazon Linux 2 due to missing PTRACE_ARCH_PRCTL 2024-09-11 16:02:11 -07:00
compel-cpu.h compel: fpu -- Add compel_test_fpu_cap helper 2018-10-30 19:27:55 +03:00
elf32-types.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
elf64-types.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
errno.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
infect-priv.h clang-format: do automatic comment fixups 2022-04-28 17:53:52 -07:00
log.h log: remove all uses of %m specifier in pr_* functions 2023-04-15 21:17:21 -07:00
piegen.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00
ptrace.h compel: set TRACESYSGOOD to distinguish breakpoints from syscalls 2023-04-15 21:17:21 -07:00
rpc-pie-priv.h clang-format: do automatic comment fixups 2022-04-28 17:53:52 -07:00
shmem.h Run 'make indent' on header files 2021-09-03 10:31:00 -07:00