Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'x86_urgent_for_v5.17_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Borislav Petkov:

- Fix the ptrace regset xfpregs_set() callback to behave according to
the ABI

- Handle poisoned pages properly in the SGX reclaimer code

* tag 'x86_urgent_for_v5.17_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/ptrace: Fix xfpregs_set()'s incorrect xmm clearing
x86/sgx: Fix missing poison handling in reclaimer

+7 -16
+1 -9
arch/x86/kernel/cpu/sgx/main.c
··· 344 344 { 345 345 struct sgx_epc_page *chunk[SGX_NR_TO_SCAN]; 346 346 struct sgx_backing backing[SGX_NR_TO_SCAN]; 347 - struct sgx_epc_section *section; 348 347 struct sgx_encl_page *encl_page; 349 348 struct sgx_epc_page *epc_page; 350 - struct sgx_numa_node *node; 351 349 pgoff_t page_index; 352 350 int cnt = 0; 353 351 int ret; ··· 416 418 kref_put(&encl_page->encl->refcount, sgx_encl_release); 417 419 epc_page->flags &= ~SGX_EPC_PAGE_RECLAIMER_TRACKED; 418 420 419 - section = &sgx_epc_sections[epc_page->section]; 420 - node = section->node; 421 - 422 - spin_lock(&node->lock); 423 - list_add_tail(&epc_page->list, &node->free_page_list); 424 - spin_unlock(&node->lock); 425 - atomic_long_inc(&sgx_nr_free_pages); 421 + sgx_free_epc_page(epc_page); 426 422 } 427 423 } 428 424
+4 -5
arch/x86/kernel/fpu/regset.c
··· 91 91 const void *kbuf, const void __user *ubuf) 92 92 { 93 93 struct fpu *fpu = &target->thread.fpu; 94 - struct user32_fxsr_struct newstate; 94 + struct fxregs_state newstate; 95 95 int ret; 96 - 97 - BUILD_BUG_ON(sizeof(newstate) != sizeof(struct fxregs_state)); 98 96 99 97 if (!cpu_feature_enabled(X86_FEATURE_FXSR)) 100 98 return -ENODEV; ··· 114 116 /* Copy the state */ 115 117 memcpy(&fpu->fpstate->regs.fxsave, &newstate, sizeof(newstate)); 116 118 117 - /* Clear xmm8..15 */ 119 + /* Clear xmm8..15 for 32-bit callers */ 118 120 BUILD_BUG_ON(sizeof(fpu->__fpstate.regs.fxsave.xmm_space) != 16 * 16); 119 - memset(&fpu->fpstate->regs.fxsave.xmm_space[8], 0, 8 * 16); 121 + if (in_ia32_syscall()) 122 + memset(&fpu->fpstate->regs.fxsave.xmm_space[8*4], 0, 8 * 16); 120 123 121 124 /* Mark FP and SSE as in use when XSAVE is enabled */ 122 125 if (use_xsave())
+2 -2
arch/x86/kernel/ptrace.c
··· 1224 1224 }, 1225 1225 [REGSET_FP] = { 1226 1226 .core_note_type = NT_PRFPREG, 1227 - .n = sizeof(struct user_i387_struct) / sizeof(long), 1227 + .n = sizeof(struct fxregs_state) / sizeof(long), 1228 1228 .size = sizeof(long), .align = sizeof(long), 1229 1229 .active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set 1230 1230 }, ··· 1271 1271 }, 1272 1272 [REGSET_XFP] = { 1273 1273 .core_note_type = NT_PRXFPREG, 1274 - .n = sizeof(struct user32_fxsr_struct) / sizeof(u32), 1274 + .n = sizeof(struct fxregs_state) / sizeof(u32), 1275 1275 .size = sizeof(u32), .align = sizeof(u32), 1276 1276 .active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set 1277 1277 },