[SRU][Bionic][PATCH 1/1] s390/kvm: fix deadlock when killed by oom

Frank Heimes frank.heimes at canonical.com
Thu Nov 1 15:27:27 UTC 2018


From: Claudio Imbrenda <imbrenda at linux.vnet.ibm.com>

BugLink: http://bugs.launchpad.net/bugs/1800849

    s390/kvm: fix deadlock when killed by oom

    When the oom killer kills a userspace process in the page fault handler
    while in guest context, the fault handler fails to release the mm_sem
    if the FAULT_FLAG_RETRY_NOWAIT option is set. This leads to a deadlock
    when tearing down the mm when the process terminates. This bug can only
    happen when pfault is enabled, so only KVM clients are affected.

    The problem arises in the rare cases in which handle_mm_fault does not
    release the mm_sem. This patch fixes the issue by manually releasing
    the mm_sem when needed.

    Fixes: 24eb3a824c4f3 ("KVM: s390: Add FAULT_FLAG_RETRY_NOWAIT for guest
fault")
    Cc: <stable at vger.kernel.org> # 3.15+
    Signed-off-by: Claudio Imbrenda <imbrenda at linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky at de.ibm.com>

---

diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index e074480..4cc3f06 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -502,6 +502,8 @@ static inline int do_exception(struct pt_regs *regs,
int access)
        /* No reason to continue if interrupted by SIGKILL. */
        if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
                fault = VM_FAULT_SIGNAL;
+               if (flags & FAULT_FLAG_RETRY_NOWAIT)
+                       goto out_up;
                goto out;
        }
        if (unlikely(fault & VM_FAULT_ERROR))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20181101/fa33b873/attachment.html>


More information about the kernel-team mailing list