FAILED: patch "[PATCH] KVM: rseq: Update rseq when processing NOTIFY_RESUME on xfer" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8646e53633f314e4d746a988240d3b951a92f94a Mon Sep 17 00:00:00 2001
From: Sean Christopherson <[email protected]>
Date: Wed, 1 Sep 2021 13:30:26 -0700
Subject: [PATCH] KVM: rseq: Update rseq when processing NOTIFY_RESUME on xfer
to KVM guest
Invoke rseq's NOTIFY_RESUME handler when processing the flag prior to transferring to a KVM guest, which is roughly equivalent to an exit to userspace and processes many of the same pending actions. While the task cannot be in an rseq critical section as the KVM path is reachable only by via ioctl(KVM_RUN), the side effects that apply to rseq outside of a critical section still apply, e.g. the current CPU needs to be updated if the task is migrated.
Clearing TIF_NOTIFY_RESUME without informing rseq can lead to segfaults and other badness in userspace VMMs that use rseq in combination with KVM, e.g. due to the CPU ID being stale after task migration.
Message-Id: <[email protected]>
kernel/entry/kvm.c +3 -1
@@ -19,8 +19,10 @@ static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu, unsigned long ti_work)if (ti_work & _TIF_NEED_RESCHED)schedule (); -if (ti_work & _TIF_NOTIFY_RESUME) +if (ti_work & _TIF_NOTIFY_RESUME) {tracehook_notify_resume (NULL ); +rseq_handle_notify_resume (NULL ,NULL ); + } ret =arch_xfer_to_guest_mode_handle_work (vcpu, ti_work);if (ret)
kernel/rseq.c +11 -3
@@ -282,9 +282,17 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)if (unlikely (t->flags &PF_EXITING ))return ; - ret =rseq_ip_fixup (regs); -if (unlikely (ret <0 )) - goto error; + +/* +* regs is NULL if and only if the caller is in a syscall path. Skip +* fixup and leave rseq_cs as is so that rseq_sycall() will detect and +* kill a misbehaving userspace on debug kernels. +*/ +if (regs) { + ret =rseq_ip_fixup (regs); +if (unlikely (ret <0 )) + goto error; + }if (unlikely (rseq_update_cpu_id (t))) goto error;return ;
Quoted 5 lines · On Sun, Sep 26, 2021, [email protected] wrote:
The patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
5.10 backport sent: https://lkml.kernel.org/r/[email protected]
Greg KH
maintainerQuoted 8 lines · Sean Christopherson
Quoted 5 lines · On Sun, Sep 26, 2021, [email protected] wrote:
The patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.5.10 backport sent: https://lkml.kernel.org/r/[email protected]
What about 5.14?
Quoted 11 lines · Greg KH
Quoted 8 lines · Sean Christopherson
Quoted 5 lines · On Sun, Sep 26, 2021, [email protected] wrote:
The patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.5.10 backport sent: https://lkml.kernel.org/r/[email protected]
What about 5.14?
The original patch applied cleanly to 5.14, went in as commit 336dabf99386.