On Wed, Mar 20, 2019 at 03:51:26PM +0100, Andrey Konovalov wrote: > This patch is a part of a series that extends arm64 kernel ABI to allow to > pass tagged user pointers (with the top byte set to something else other > than 0x00) as syscall arguments. > > find_active_uprobe() uses user pointers (obtained via > instruction_pointer(regs)) for vma lookups, which can only by done with > untagged pointers. > > Untag user pointers in this function. > > Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxxx> > --- > kernel/events/uprobes.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index c5cde87329c7..d3a2716a813a 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1992,6 +1992,8 @@ static struct uprobe *find_active_uprobe(unsigned long bp_vaddr, int *is_swbp) > struct uprobe *uprobe = NULL; > struct vm_area_struct *vma; > > + bp_vaddr = untagged_addr(bp_vaddr); > + > down_read(&mm->mmap_sem); > vma = find_vma(mm, bp_vaddr); > if (vma && vma->vm_start <= bp_vaddr) { Similarly here, that's a breakpoint address, hence instruction pointer (PC) which is untagged. -- Catalin