Re: pahole issue. Re: [PATCH bpf-next 2/2] fork: Rename mm_init to task_mm_init

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 5/9/23 10:38 PM, Yafang Shao wrote:
On Wed, May 10, 2023 at 1:18 AM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:

On Tue, May 9, 2023 at 8:36 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:

On Tue, May 2, 2023 at 11:40 AM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:

Alan,

wdyt on below?


Hi Alexei,

Per my understanding, not only does pahole have issues, but also there
are issues in the kernel.
This panic is caused by the inconsistency between BTF and kallsyms as such:
    bpf_check_attach_target
        tname = btf_name_by_offset(btf, t->name_off); // btf
        addr = kallsyms_lookup_name(tname); // kallsyms

So if the function displayed in /proc/sys/btf/vmlinux is not the same
with the function displayed in /proc/kallsyms, we will get a wrong
addr.  I think it is not proper to rely wholly on the userspace tools
to make them the same. The kernel should also imrpve the verifier to
make sure they are really the same function.  WDYT?

Are you saying it's not proper to rely on compilers
and linkers to build the kernel?
pahole, resolved_btfid, kallsym gen, objtool are part of the
compilation process.
The bugs in them are discovered from time to time and
have to be fixed. Just like compiler and linker bugs.

I was wondering if it is possible to add BTF_ID into kallsyms or to
add function address into BTF. Because the function name is not
unique, while the function ID is unique. So with the function ID we
can always get what we want.

We just had some discussions during LSFMMBPF led by Jiri
about how to resolve such issues. Yes, adding 'addr' to BTF
is one solution. Also, if this patch set (https://lore.kernel.org/lkml/20221205163157.269335-1-nick.alcock@xxxxxxxxxx/) can make it
into the kernel, adding 'file_path' to the BTF should also work.
So ya, two possible solutions here.


For example,

$ cat /proc/kallsyms | awk '{if ($2=="t"||$2=="T") {print $3}}' |
sort|   uniq -c | sort -n -r | less
      56 __pfx_cleanup_module
      56 cleanup_module
      47 __pfx_cpumask_weight.constprop.0
      47 cpumask_weight.constprop.0
      21 __pfx_jhash
      21 __pfx_cpumask_weight
      21 jhash
      21 cpumask_weight
      17 type_show
      17 __pfx_type_show
      14 __rhashtable_insert_fast.constprop.0
      14 __pfx___rhashtable_insert_fast.constprop.0
      12 __rhashtable_remove_fast_one.cold
      12 __rhashtable_remove_fast_one
      12 __pfx___rhashtable_remove_fast_one
      11 __xfrm_policy_check2.constprop.0
      11 __pfx___xfrm_policy_check2.constprop.0
      11 __pfx_modalias_show
      11 modalias_show
      10 rht_key_get_hash.isra.0
      10 __pfx_rht_key_get_hash.isra.0
      10 __pfx_name_show
      10 __pfx_init_once
      10 name_show
      10 init_once
       9 __pfx_event_show
       9 event_show
       8 __pfx_dst_output
       8 dst_output
       7 state_show
       7 size_show
       7 __pfx_state_show
       7 __pfx_size_show

kallsyms_lookup_name() always returns the first function and ignores
the others, so it is impossible to trace the other functions with the
same name AFAIK.





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux