summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/fork.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index e67d7b773348..47887bba944f 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -414,7 +414,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
414 unsigned long charge; 414 unsigned long charge;
415 415
416 uprobe_start_dup_mmap(); 416 uprobe_start_dup_mmap();
417 down_write(&oldmm->mmap_sem); 417 if (down_write_killable(&oldmm->mmap_sem)) {
418 retval = -EINTR;
419 goto fail_uprobe_end;
420 }
418 flush_cache_dup_mm(oldmm); 421 flush_cache_dup_mm(oldmm);
419 uprobe_dup_mmap(oldmm, mm); 422 uprobe_dup_mmap(oldmm, mm);
420 /* 423 /*
@@ -526,6 +529,7 @@ out:
526 up_write(&mm->mmap_sem); 529 up_write(&mm->mmap_sem);
527 flush_tlb_mm(oldmm); 530 flush_tlb_mm(oldmm);
528 up_write(&oldmm->mmap_sem); 531 up_write(&oldmm->mmap_sem);
532fail_uprobe_end:
529 uprobe_end_dup_mmap(); 533 uprobe_end_dup_mmap();
530 return retval; 534 return retval;
531fail_nomem_anon_vma_fork: 535fail_nomem_anon_vma_fork: