mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
rseq: Set rseq::cpu_id_start to 0 on unregistration
The RSEQ rework changed that to RSEQ_CPU_UNINITILIZED, which is obviously
incompatible. Revert back to the original behavior.
Fixes: 0f085b4188 ("rseq: Provide and use rseq_set_ids()")
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Link: https://patch.msgid.link/20260428224427.271566313%40kernel.org
Cc: stable@vger.kernel.org
This commit is contained in:
parent
cb48828f06
commit
2cb68e4512
|
|
@ -236,11 +236,6 @@ static int __init rseq_debugfs_init(void)
|
|||
}
|
||||
__initcall(rseq_debugfs_init);
|
||||
|
||||
static bool rseq_set_ids(struct task_struct *t, struct rseq_ids *ids, u32 node_id)
|
||||
{
|
||||
return rseq_set_ids_get_csaddr(t, ids, node_id, NULL);
|
||||
}
|
||||
|
||||
static bool rseq_handle_cs(struct task_struct *t, struct pt_regs *regs)
|
||||
{
|
||||
struct rseq __user *urseq = t->rseq.usrptr;
|
||||
|
|
@ -384,19 +379,22 @@ void rseq_syscall(struct pt_regs *regs)
|
|||
|
||||
static bool rseq_reset_ids(void)
|
||||
{
|
||||
struct rseq_ids ids = {
|
||||
.cpu_id = RSEQ_CPU_ID_UNINITIALIZED,
|
||||
.mm_cid = 0,
|
||||
};
|
||||
struct rseq __user *rseq = current->rseq.usrptr;
|
||||
|
||||
/*
|
||||
* If this fails, terminate it because this leaves the kernel in
|
||||
* stupid state as exit to user space will try to fixup the ids
|
||||
* again.
|
||||
*/
|
||||
if (rseq_set_ids(current, &ids, 0))
|
||||
return true;
|
||||
scoped_user_rw_access(rseq, efault) {
|
||||
unsafe_put_user(0, &rseq->cpu_id_start, efault);
|
||||
unsafe_put_user(RSEQ_CPU_ID_UNINITIALIZED, &rseq->cpu_id, efault);
|
||||
unsafe_put_user(0, &rseq->node_id, efault);
|
||||
unsafe_put_user(0, &rseq->mm_cid, efault);
|
||||
}
|
||||
return true;
|
||||
|
||||
efault:
|
||||
force_sig(SIGSEGV);
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user