linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Avi Kivity <avi@scylladb.com>
To: linux-perf-users@vger.kernel.org
Subject: Infinite recursion in `perf record`
Date: Mon, 16 May 2022 18:22:35 +0300	[thread overview]
Message-ID: <f0add43b-3de5-20c5-22c4-70aff4af959f@scylladb.com> (raw)

In bpf-event.c we have:


struct btf * __weak btf__load_from_kernel_by_id(__u32 id)
{
        struct btf *btf;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
        int err = btf__get_from_id(id, &btf);
#pragma GCC diagnostic pop

        return err ? ERR_PTR(err) : btf;
}

and in btf.c we have:


int btf__get_from_id(__u32 id, struct btf **btf)
{
         struct btf *res;
         int err;

         *btf = NULL;
         res = btf__load_from_kernel_by_id(id);
         err = libbpf_get_error(res);

         if (err)
                 return libbpf_err(err);

         *btf = res;
         return 0;
}

Obviously, if the first weak symbol isn't overridden we get into an 
infinite recursion, which is what I see immediately on running perf record:


(gdb) bt
#0  0x00007f3d94c26d76 in btf__get_from_id (id=282, 
btf=btf@entry=0x7ffc1dab4010) at btf.c:1410
#1  0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#2  0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4060) at btf.c:1411
#3  0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#4  0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab40b0) at btf.c:1411
#5  0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#6  0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4100) at btf.c:1411
#7  0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#8  0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4150) at btf.c:1411
#9  0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#10 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab41a0) at btf.c:1411
#11 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#12 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab41f0) at btf.c:1411
#13 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#14 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4240) at btf.c:1411
#15 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#16 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4290) at btf.c:1411
#17 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#18 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab42e0) at btf.c:1411
#19 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#20 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4330) at btf.c:1411
#21 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#22 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4380) at btf.c:1411
#23 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#24 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab43d0) at btf.c:1411
#25 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#26 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4420) at btf.c:1411
#27 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#28 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4470) at btf.c:1411
#29 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#30 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab44c0) at btf.c:1411
#31 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#32 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4510) at btf.c:1411
#33 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#34 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4560) at btf.c:1411
#35 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#36 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab45b0) at btf.c:1411
#37 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#38 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4600) at btf.c:1411
#39 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#40 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4650) at btf.c:1411
#41 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#42 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab46a0) at btf.c:1411
#43 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#44 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab46f0) at btf.c:1411
#45 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#46 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4740) at btf.c:1411
#47 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#48 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4790) at btf.c:1411
#49 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#50 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab47e0) at btf.c:1411
#51 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#52 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4830) at btf.c:1411
#53 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#54 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4880) at btf.c:1411
#55 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#56 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab48d0) at btf.c:1411
#57 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#58 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4920) at btf.c:1411
#59 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#60 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4970) at btf.c:1411
#61 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#62 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab49c0) at btf.c:1411
#63 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#64 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4a10) at btf.c:1411
#65 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#66 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4a60) at btf.c:1411
#67 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#68 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4ab0) at btf.c:1411
#69 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#70 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4b00) at btf.c:1411
#71 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#72 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4b50) at btf.c:1411
#73 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#74 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4ba0) at btf.c:1411
#75 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#76 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4bf0) at btf.c:1411
#77 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
#78 0x00007f3d94c26d8d in btf__get_from_id (id=<optimized out>, 
btf=btf@entry=0x7ffc1dab4c40) at btf.c:1411
#79 0x000055f3ff6d5004 in btf__load_from_kernel_by_id (id=<optimized 
out>) at util/bpf-event.c:30
--Type <RET> for more, q to quit, c to continue without paging--


(rest of infinite stack trace omitted)


I guess I should load some library or other, but I have no idea which, 
and in any case this is quite a fragile interface.


perf-5.17.6-300.fc36.x86_64



             reply	other threads:[~2022-05-16 15:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 15:22 Avi Kivity [this message]
2022-05-16 22:04 ` Infinite recursion in `perf record` Ian Rogers
2022-05-17 13:23   ` Avi Kivity
2022-05-17 14:52 ` Arnaldo Carvalho de Melo
2022-05-17 14:59   ` Avi Kivity
2022-05-17 21:17     ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f0add43b-3de5-20c5-22c4-70aff4af959f@scylladb.com \
    --to=avi@scylladb.com \
    --cc=linux-perf-users@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).