From: Greg Kroah-Hartman Date: Thu, 27 Feb 2020 13:03:44 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v4.4.215~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d8b084366aae2b3eb36bb336f0086ab77a4a1874;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: xen-enable-interrupts-when-calling-_cond_resched.patch --- diff --git a/queue-4.4/series b/queue-4.4/series index 25f4bba7c6c..1be0be8ed76 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -110,3 +110,4 @@ ecryptfs-replace-bug_on-with-error-handling-code.patch alsa-rawmidi-avoid-bit-fields-for-state-flags.patch alsa-seq-avoid-concurrent-access-to-queue-flags.patch alsa-seq-fix-concurrent-access-to-queue-current-tick-time.patch +xen-enable-interrupts-when-calling-_cond_resched.patch diff --git a/queue-4.4/xen-enable-interrupts-when-calling-_cond_resched.patch b/queue-4.4/xen-enable-interrupts-when-calling-_cond_resched.patch new file mode 100644 index 00000000000..7499235f5ef --- /dev/null +++ b/queue-4.4/xen-enable-interrupts-when-calling-_cond_resched.patch @@ -0,0 +1,43 @@ +From 8645e56a4ad6dcbf504872db7f14a2f67db88ef2 Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Wed, 19 Feb 2020 18:30:26 +0100 +Subject: xen: Enable interrupts when calling _cond_resched() + +From: Thomas Gleixner + +commit 8645e56a4ad6dcbf504872db7f14a2f67db88ef2 upstream. + +xen_maybe_preempt_hcall() is called from the exception entry point +xen_do_hypervisor_callback with interrupts disabled. + +_cond_resched() evades the might_sleep() check in cond_resched() which +would have caught that and schedule_debug() unfortunately lacks a check +for irqs_disabled(). + +Enable interrupts around the call and use cond_resched() to catch future +issues. + +Fixes: fdfd811ddde3 ("x86/xen: allow privcmd hypercalls to be preempted") +Signed-off-by: Thomas Gleixner +Link: https://lore.kernel.org/r/878skypjrh.fsf@nanos.tec.linutronix.de +Reviewed-by: Juergen Gross +Signed-off-by: Boris Ostrovsky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/xen/preempt.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/xen/preempt.c ++++ b/drivers/xen/preempt.c +@@ -37,7 +37,9 @@ asmlinkage __visible void xen_maybe_pree + * cpu. + */ + __this_cpu_write(xen_in_preemptible_hcall, false); +- _cond_resched(); ++ local_irq_enable(); ++ cond_resched(); ++ local_irq_disable(); + __this_cpu_write(xen_in_preemptible_hcall, true); + } + }