From: Richard Weinberger Date: Sun, 20 Jul 2014 11:16:20 +0000 (+0200) Subject: um: Fix hung task in fix_range_common() X-Git-Tag: v4.14-rc1~7202^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=468f65976a8d065ee1f27782337f4ee85a9151c5;p=platform%2Fkernel%2Flinux-rpi.git um: Fix hung task in fix_range_common() If do_ops() fails we have to release current->mm->mmap_sem otherwise the failing task will never terminate. Reported-by: Toralf Förster Signed-off-by: Richard Weinberger --- diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c index 1fc619e..f1b3eb1 100644 --- a/arch/um/kernel/tlb.c +++ b/arch/um/kernel/tlb.c @@ -12,6 +12,7 @@ #include #include #include +#include struct host_vm_change { struct host_vm_op { @@ -286,8 +287,11 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr, /* This is not an else because ret is modified above */ if (ret) { printk(KERN_ERR "fix_range_common: failed, killing current " - "process\n"); + "process: %d\n", task_tgid_vnr(current)); + /* We are under mmap_sem, release it such that current can terminate */ + up_write(¤t->mm->mmap_sem); force_sig(SIGKILL, current); + do_signal(); } }