Currently, fpu->guest_perm is copied from fpu->perm, which is derived from fpu_kernel_cfg.default_features. Initialize guest FPU permissions from guest defaults instead of host defaults. This ensures that any changes to guest_default_{features,size} are automatically reflected in guest permissions, which in turn guarantees that fpstate_realloc() allocates a correctly sized XSAVE buffer for guest FPUs. Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> --- arch/x86/kernel/fpu/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 0b695c23bbfb..52df97a8a61b 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -542,8 +542,10 @@ void fpstate_reset(struct fpu *fpu) fpu->perm.__state_perm = fpu_kernel_cfg.default_features; fpu->perm.__state_size = fpu_kernel_cfg.default_size; fpu->perm.__user_state_size = fpu_user_cfg.default_size; - /* Same defaults for guests */ - fpu->guest_perm = fpu->perm; + + fpu->guest_perm.__state_perm = fpu_kernel_cfg.guest_default_features; + fpu->guest_perm.__state_size = fpu_kernel_cfg.guest_default_size; + fpu->guest_perm.__user_state_size = fpu_user_cfg.guest_default_size; } static inline void fpu_inherit_perms(struct fpu *dst_fpu) -- 2.46.1