Messages in this thread | | | Subject | Re: [PATCH] uprobes: wait for mmap_sem for write killable | From | Vlastimil Babka <> | Date | Fri, 11 Mar 2016 15:58:43 +0100 |
| |
On 02/29/2016 06:42 PM, Michal Hocko wrote: > From: Michal Hocko <mhocko@suse.com> > > xol_add_vma needs mmap_sem for write. If the waiting task gets killed by > the oom killer it would block oom_reaper from asynchronous address space > reclaim and reduce the chances of timely OOM resolving. Wait for the > lock in the killable mode and return with EINTR if the task got killed > while waiting. > > Do not warn in dup_xol_work if __create_xol_area failed due to fatal > signal pending because this is usually considered a kernel issue. > > Cc: Oleg Nesterov <oleg@redhat.com> > Signed-off-by: Michal Hocko <mhocko@suse.com> > --- > kernel/events/uprobes.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index 8eef5f55d3f0..fb4a6bcc88ce 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -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; > @@ -1468,7 +1470,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) ^ missing ")"
Other than that, Acked-by: Vlastimil Babka <vbabka@suse.cz>
> uprobe_warn(current, "dup xol area"); > } > >
| |