aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/events/uprobes.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index 2ef123306183..b03256cced52 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -122,6 +122,11 @@ static loff_t vma_address(struct vm_area_struct *vma, loff_t offset)
122 return vaddr; 122 return vaddr;
123} 123}
124 124
125static loff_t vaddr_to_offset(struct vm_area_struct *vma, unsigned long vaddr)
126{
127 return ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + (vaddr - vma->vm_start);
128}
129
125/** 130/**
126 * __replace_page - replace page in vma by new page. 131 * __replace_page - replace page in vma by new page.
127 * based on replace_page in mm/ksm.c 132 * based on replace_page in mm/ksm.c
@@ -978,7 +983,7 @@ static void build_probe_list(struct inode *inode,
978 struct uprobe *u; 983 struct uprobe *u;
979 984
980 INIT_LIST_HEAD(head); 985 INIT_LIST_HEAD(head);
981 min = ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + start - vma->vm_start; 986 min = vaddr_to_offset(vma, start);
982 max = min + (end - start) - 1; 987 max = min + (end - start) - 1;
983 988
984 spin_lock_irqsave(&uprobes_treelock, flags); 989 spin_lock_irqsave(&uprobes_treelock, flags);
@@ -1442,12 +1447,9 @@ static struct uprobe *find_active_uprobe(unsigned long bp_vaddr, int *is_swbp)
1442 vma = find_vma(mm, bp_vaddr); 1447 vma = find_vma(mm, bp_vaddr);
1443 if (vma && vma->vm_start <= bp_vaddr) { 1448 if (vma && vma->vm_start <= bp_vaddr) {
1444 if (valid_vma(vma, false)) { 1449 if (valid_vma(vma, false)) {
1445 struct inode *inode; 1450 struct inode *inode = vma->vm_file->f_mapping->host;
1446 loff_t offset; 1451 loff_t offset = vaddr_to_offset(vma, bp_vaddr);
1447 1452
1448 inode = vma->vm_file->f_mapping->host;
1449 offset = bp_vaddr - vma->vm_start;
1450 offset += (loff_t)vma->vm_pgoff << PAGE_SHIFT;
1451 uprobe = find_uprobe(inode, offset); 1453 uprobe = find_uprobe(inode, offset);
1452 } 1454 }
1453 1455