On Tue, Sep 9, 2025 at 2:42 PM Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote: > > It was reported that Intel PT address filters do not work in Docker > containers. That relates to the use of overlayfs. > > overlayfs records the backing file in struct vm_area_struct vm_file, > instead of the user file that the user mmapped. In order for an address > filter to match, it must compare to the user file inode. There is an > existing helper file_user_inode() for that situation. > > Use file_user_inode() instead of file_inode() to get the inode for address > filter matching. > > Example: > > Setup: > > # cd /root > # mkdir test ; cd test ; mkdir lower upper work merged > # cp `which cat` lower > # mount -t overlay overlay -olowerdir=lower,upperdir=upper,workdir=work merged > # perf record --buildid-mmap -e intel_pt//u --filter 'filter * @ /root/test/merged/cat' -- /root/test/merged/cat /proc/self/maps > ... > 55d61d246000-55d61d2e1000 r-xp 00018000 00:1a 3418 /root/test/merged/cat > ... > [ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.015 MB perf.data ] > # perf buildid-cache --add /root/test/merged/cat > > Before: > > Address filter does not match so there are no control flow packets > > # perf script --itrace=e > # perf script --itrace=b | wc -l > 0 > # perf script -D | grep 'TIP.PGE' | wc -l > 0 > # > > After: > > Address filter does match so there are control flow packets > > # perf script --itrace=e > # perf script --itrace=b | wc -l > 235 > # perf script -D | grep 'TIP.PGE' | wc -l > 57 > # > > With respect to stable kernels, overlayfs mmap function ovl_mmap() was > added in v4.19 but file_user_inode() was not added until v6.8 and never > back-ported to stable kernels. FMODE_BACKING that it depends on was added > in v6.5. This issue has gone largely unnoticed, so back-porting before > v6.8 is probably not worth it, Agreed. > so put 6.8 as the stable kernel prerequisite > version, although in practice the next long term kernel is 6.12. > > Reported-by: Edd Barrett <edd@xxxxxxxxxxxxxxxx> > Closes: https://lore.kernel.org/linux-perf-users/aBCwoq7w8ohBRQCh@xxxxxxxxxx > Cc: stable@xxxxxxxxxxxxxxx # 6.8 > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Feel free to add Acked-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > kernel/events/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index fb1eae762044..184f3dc7b03b 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -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) > -- > 2.48.1 >