[Devel] [PATCH hci-8.1] x86/traps: emulate CPUID faults for user tasks in exc_general_protection()
no-reply at sashiko.virtuozzo.com
no-reply at sashiko.virtuozzo.com
Tue Oct 6 11:32:56 MSK 2026
> A non-empty /proc/vz/cpuid_override table makes ve_setup_task() set
> TIF_CPUID_OVERRIDE on every task entering a VE, so the CPU raises #GP
> on each CPUID the task executes and check_cpuid_fault() is supposed
> to emulate the instruction with the table values.
>
> The call sits after the user-mode branch of exc_general_protection(),
> which ends in gp_user_force_sig_segv() and goto exit, so it is reached
> only for a kernel-mode #GP, where CPUID never faults. Every Container
> task dies with SIGSEGV on the first CPUID of glibc init_cpu_features()
> instead of getting the override:
>
> traps: bash[179661] general protection fault ip:7fa8b470357f ... in
> ld-linux-x86-64.so.2[1857f,...]
>
> The original vz8 patch was written for 4.18, where do_general_protection()
> handled kernel mode first and the call landed on the user path. The vz9
> port kept the relative position after upstream had reversed the order of
> the two branches.
>
> Move the call into the user-mode branch, before the signal is sent.
> check_cpuid_fault() still declines tasks with TIF_NOCPUID, so
> arch_prctl(ARCH_SET_CPUID, 0) keeps its SIGSEGV semantics.
>
> Fixes: 1033fe455434 ("arch/x86: introduce cpuid override")
> https://virtuozzo.atlassian.net/browse/VSTOR-148656
>
> Feature: x86: cpu pools (cpuid override)
> Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.vzint.dev/#/patchset/20261006-b4-prep-khorenko-vstor-148656-just-cpuid-v1-1-6f2a2a6deef3@virtuozzo.com?part=1
More information about the Devel
mailing list