Loading kernel/events/uprobes.c +2 −11 Original line number Diff line number Diff line Loading @@ -500,30 +500,21 @@ __copy_insn(struct address_space *mapping, struct file *filp, char *insn, unsigned long nbytes, loff_t offset) { struct page *page; void *vaddr; unsigned long off; pgoff_t idx; if (!filp) return -EINVAL; if (!mapping->a_ops->readpage) return -EIO; idx = offset >> PAGE_CACHE_SHIFT; off = offset & ~PAGE_MASK; /* * Ensure that the page that has the original instruction is * populated and in page-cache. */ page = read_mapping_page(mapping, idx, filp); page = read_mapping_page(mapping, offset >> PAGE_CACHE_SHIFT, filp); if (IS_ERR(page)) return PTR_ERR(page); vaddr = kmap_atomic(page); memcpy(insn, vaddr + off, nbytes); kunmap_atomic(vaddr); copy_from_page(page, offset, insn, nbytes); page_cache_release(page); return 0; Loading Loading
kernel/events/uprobes.c +2 −11 Original line number Diff line number Diff line Loading @@ -500,30 +500,21 @@ __copy_insn(struct address_space *mapping, struct file *filp, char *insn, unsigned long nbytes, loff_t offset) { struct page *page; void *vaddr; unsigned long off; pgoff_t idx; if (!filp) return -EINVAL; if (!mapping->a_ops->readpage) return -EIO; idx = offset >> PAGE_CACHE_SHIFT; off = offset & ~PAGE_MASK; /* * Ensure that the page that has the original instruction is * populated and in page-cache. */ page = read_mapping_page(mapping, idx, filp); page = read_mapping_page(mapping, offset >> PAGE_CACHE_SHIFT, filp); if (IS_ERR(page)) return PTR_ERR(page); vaddr = kmap_atomic(page); memcpy(insn, vaddr + off, nbytes); kunmap_atomic(vaddr); copy_from_page(page, offset, insn, nbytes); page_cache_release(page); return 0; Loading