|
@@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area)
|
|
|
struct vm_area_struct *vma;
|
|
|
int ret;
|
|
|
|
|
|
- down_write(&mm->mmap_sem);
|
|
|
+ if (down_write_killable(&mm->mmap_sem))
|
|
|
+ return -EINTR;
|
|
|
+
|
|
|
if (mm->uprobes_state.xol_area) {
|
|
|
ret = -EALREADY;
|
|
|
goto fail;
|
|
@@ -1469,7 +1471,8 @@ static void dup_xol_work(struct callback_head *work)
|
|
|
if (current->flags & PF_EXITING)
|
|
|
return;
|
|
|
|
|
|
- if (!__create_xol_area(current->utask->dup_xol_addr))
|
|
|
+ if (!__create_xol_area(current->utask->dup_xol_addr) &&
|
|
|
+ !fatal_signal_pending(current))
|
|
|
uprobe_warn(current, "dup xol area");
|
|
|
}
|
|
|
|