@@ -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)
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@intel.com> --- arch/x86/kernel/fpu/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)