On Mon, Apr 21, 2025 at 2:45 PM Jiri Olsa <[email protected]> wrote: > > Currently unapply_uprobe takes mmap_read_lock, but it might call > remove_breakpoint which eventually changes user pages. > > Current code writes either breakpoint or original instruction, so > it can probably go away with that, but with the upcoming change that > writes multiple instructions on the probed address we need to ensure > that any update to mm's pages is exclusive. > > Signed-off-by: Jiri Olsa <[email protected]> > --- > kernel/events/uprobes.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) >
Makes sense. Acked-by: Andrii Nakryiko <[email protected]> > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index c8d88060dfbf..d256c695d7ff 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1483,7 +1483,7 @@ static int unapply_uprobe(struct uprobe *uprobe, struct > mm_struct *mm) > struct vm_area_struct *vma; > int err = 0; > > - mmap_read_lock(mm); > + mmap_write_lock(mm); > for_each_vma(vmi, vma) { > unsigned long vaddr; > loff_t offset; > @@ -1500,7 +1500,7 @@ static int unapply_uprobe(struct uprobe *uprobe, struct > mm_struct *mm) > vaddr = offset_to_vaddr(vma, uprobe->offset); > err |= remove_breakpoint(uprobe, vma, vaddr); > } > - mmap_read_unlock(mm); > + mmap_write_unlock(mm); > > return err; > } > -- > 2.49.0 >
