Commit 343b4b44 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'perf_urgent_for_v6.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fixes from Borislav Petkov:

 - Make sure perf reporting works correctly in setups using
   overlayfs or FUSE

 - Move the uprobe optimization to a better location logically

* tag 'perf_urgent_for_v6.18_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf/core: Fix MMAP2 event device with backing files
  perf/core: Fix MMAP event path names with backing files
  perf/core: Fix address filter match with backing files
  uprobe: Move arch_uprobe_optimize right after handlers execution
parents c7864eea fa4f4bae
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -9403,7 +9403,7 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
		flags |= MAP_HUGETLB;

	if (file) {
		struct inode *inode;
		const struct inode *inode;
		dev_t dev;

		buf = kmalloc(PATH_MAX, GFP_KERNEL);
@@ -9416,12 +9416,12 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event)
		 * need to add enough zero bytes after the string to handle
		 * the 64bit alignment we do later.
		 */
		name = file_path(file, buf, PATH_MAX - sizeof(u64));
		name = d_path(file_user_path(file), buf, PATH_MAX - sizeof(u64));
		if (IS_ERR(name)) {
			name = "//toolong";
			goto cpy_name;
		}
		inode = file_inode(vma->vm_file);
		inode = file_user_inode(vma->vm_file);
		dev = inode->i_sb->s_dev;
		ino = inode->i_ino;
		gen = inode->i_generation;
@@ -9492,7 +9492,7 @@ static bool perf_addr_filter_match(struct perf_addr_filter *filter,
	if (!filter->path.dentry)
		return false;

	if (d_inode(filter->path.dentry) != file_inode(file))
	if (d_inode(filter->path.dentry) != file_user_inode(file))
		return false;

	if (filter->offset > offset + size)
+3 −3
Original line number Diff line number Diff line
@@ -2765,6 +2765,9 @@ static void handle_swbp(struct pt_regs *regs)

	handler_chain(uprobe, regs);

	/* Try to optimize after first hit. */
	arch_uprobe_optimize(&uprobe->arch, bp_vaddr);

	/*
	 * If user decided to take execution elsewhere, it makes little sense
	 * to execute the original instruction, so let's skip it.
@@ -2772,9 +2775,6 @@ static void handle_swbp(struct pt_regs *regs)
	if (instruction_pointer(regs) != bp_vaddr)
		goto out;

	/* Try to optimize after first hit. */
	arch_uprobe_optimize(&uprobe->arch, bp_vaddr);

	if (arch_uprobe_skip_sstep(&uprobe->arch, regs))
		goto out;