On Mon, Apr 23, 2018 at 7:21 PM, Song Liu <songliubrav...@fb.com> wrote: > As Miklos reported and suggested: > > This pattern repeats two times in trace_uprobe.c and in > kernel/events/core.c as well: > > ret = kern_path(filename, LOOKUP_FOLLOW, &path); > if (ret) > goto fail_address_parse; > > inode = igrab(d_inode(path.dentry)); > path_put(&path); > > And it's wrong. You can only hold a reference to the inode if you > have an active ref to the superblock as well (which is normally > through path.mnt) or holding s_umount. > > This way unmounting the containing filesystem while the tracepoint is > active will give you the "VFS: Busy inodes after unmount..." message > and a crash when the inode is finally put. > > Solution: store path instead of inode. > > This patch fixes two instances in trace_uprobe.c. struct path is added to > struct trace_uprobe to keep the inode and containing mount point > referenced. > > Fixes: f3f096cfedf8 ("tracing: Provide trace events interface for uprobes") > Fixes: 33ea4b24277b ("perf/core: Implement the 'perf_uprobe' PMU") > Cc: Steven Rostedt <rost...@goodmis.org> > Cc: Ingo Molnar <mi...@redhat.com> > Cc: Howard McLauchlan <hmclauch...@fb.com> > Cc: Josef Bacik <jba...@fb.com> > Cc: Srikar Dronamraju <sri...@linux.vnet.ibm.com> > Cc: Miklos Szeredi <mik...@szeredi.hu> > Reported-by: Miklos Szeredi <mik...@szeredi.hu> > Signed-off-by: Song Liu <songliubrav...@fb.com>
Acked-by: Miklos Szeredi <mszer...@redhat.com>