forked from Minki/linux
- Fix the ptrace regset xfpregs_set() callback to behave according to the ABI
- Handle poisoned pages properly in the SGX reclaimer code -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmISMboACgkQEsHwGGHe VUoo0hAAvohA86G6CCfDvQUjSoimYqsKockWCS594/Fz0eEEi7wf+1e48OOtEVnW 4TCqd/dCNXnzOSj0KE2/nY+X3SaOv+2gLr1uyv+A8iX8nkTt+3Hkrzjm6mkSE5Bq C6aKANwdqfzmyy7efYHYHOb4hbcMe8t1df7rPsAwaT+MVJCOgjnICLAx4+YuhNqP hvBs6o5wFgPx6/LJzmgaL1QA/qxstmhagLncU1MXZPte6xo+Dp1/6qMm2QFiJgIr clxZU8Q87NlzIAOGFohwzs0fm3DID529PzTfArqsRJPKB8TX0EUoZ8d2OPzD03I1 aOdw6dhdNxfgORI0+5glffJ6aGbUi076x+1K4r4wYzGHW+hjd/gyNxIfnGOOgKOG ZZdf01wiOpcvzBHk/yx+jSfmwI5Zt079DCTD9MnutV8k952dtqZNmJ+Vrkmj9aCS Lsv/AZJDGa4HEBAI+lvYCZb1xFzBIDCinVgl/PrFrcMFuRi737J2C50LzYeZpg/x gllkk3U5kTlZ1iGiQlRzBlDu28vXVIV9koF5xoOwNLYjpFr6Jog62tiioP5IS9ym VVxAaYlzYNNMjwwtypS55sMmYK+dnaK/jrmCp9xI3br5e9OXhZCr3dq/od03ijPH jhFCr0Ec7IPIk5uHj9uvcUDKyvrqjDWCG8aK1Yc65Ed5pLYX7cQ= =5Bl4 -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
222177397a
@ -344,10 +344,8 @@ static void sgx_reclaim_pages(void)
|
||||
{
|
||||
struct sgx_epc_page *chunk[SGX_NR_TO_SCAN];
|
||||
struct sgx_backing backing[SGX_NR_TO_SCAN];
|
||||
struct sgx_epc_section *section;
|
||||
struct sgx_encl_page *encl_page;
|
||||
struct sgx_epc_page *epc_page;
|
||||
struct sgx_numa_node *node;
|
||||
pgoff_t page_index;
|
||||
int cnt = 0;
|
||||
int ret;
|
||||
@ -418,13 +416,7 @@ skip:
|
||||
kref_put(&encl_page->encl->refcount, sgx_encl_release);
|
||||
epc_page->flags &= ~SGX_EPC_PAGE_RECLAIMER_TRACKED;
|
||||
|
||||
section = &sgx_epc_sections[epc_page->section];
|
||||
node = section->node;
|
||||
|
||||
spin_lock(&node->lock);
|
||||
list_add_tail(&epc_page->list, &node->free_page_list);
|
||||
spin_unlock(&node->lock);
|
||||
atomic_long_inc(&sgx_nr_free_pages);
|
||||
sgx_free_epc_page(epc_page);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,11 +91,9 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
|
||||
const void *kbuf, const void __user *ubuf)
|
||||
{
|
||||
struct fpu *fpu = &target->thread.fpu;
|
||||
struct user32_fxsr_struct newstate;
|
||||
struct fxregs_state newstate;
|
||||
int ret;
|
||||
|
||||
BUILD_BUG_ON(sizeof(newstate) != sizeof(struct fxregs_state));
|
||||
|
||||
if (!cpu_feature_enabled(X86_FEATURE_FXSR))
|
||||
return -ENODEV;
|
||||
|
||||
@ -116,9 +114,10 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,
|
||||
/* Copy the state */
|
||||
memcpy(&fpu->fpstate->regs.fxsave, &newstate, sizeof(newstate));
|
||||
|
||||
/* Clear xmm8..15 */
|
||||
/* Clear xmm8..15 for 32-bit callers */
|
||||
BUILD_BUG_ON(sizeof(fpu->__fpstate.regs.fxsave.xmm_space) != 16 * 16);
|
||||
memset(&fpu->fpstate->regs.fxsave.xmm_space[8], 0, 8 * 16);
|
||||
if (in_ia32_syscall())
|
||||
memset(&fpu->fpstate->regs.fxsave.xmm_space[8*4], 0, 8 * 16);
|
||||
|
||||
/* Mark FP and SSE as in use when XSAVE is enabled */
|
||||
if (use_xsave())
|
||||
|
@ -1224,7 +1224,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = {
|
||||
},
|
||||
[REGSET_FP] = {
|
||||
.core_note_type = NT_PRFPREG,
|
||||
.n = sizeof(struct user_i387_struct) / sizeof(long),
|
||||
.n = sizeof(struct fxregs_state) / sizeof(long),
|
||||
.size = sizeof(long), .align = sizeof(long),
|
||||
.active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set
|
||||
},
|
||||
@ -1271,7 +1271,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = {
|
||||
},
|
||||
[REGSET_XFP] = {
|
||||
.core_note_type = NT_PRXFPREG,
|
||||
.n = sizeof(struct user32_fxsr_struct) / sizeof(u32),
|
||||
.n = sizeof(struct fxregs_state) / sizeof(u32),
|
||||
.size = sizeof(u32), .align = sizeof(u32),
|
||||
.active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user