• Tony Ambardar's avatar
    bpf: Fix sysfs export of empty BTF section · e23bb04b
    Tony Ambardar authored
    If BTF data is missing or removed from the ELF section it is still exported
    via sysfs as a zero-length file:
    
      root@OpenWrt:/# ls -l /sys/kernel/btf/vmlinux
      -r--r--r--    1 root    root    0 Jul 18 02:59 /sys/kernel/btf/vmlinux
    
    Moreover, reads from this file succeed and leak kernel data:
    
      root@OpenWrt:/# hexdump -C /sys/kernel/btf/vmlinux|head -10
      000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
      *
      000cc0 00 00 00 00 00 00 00 00 00 00 00 00 80 83 b0 80 |................|
      000cd0 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
      000ce0 00 00 00 00 00 00 00 00 00 00 00 00 57 ac 6e 9d |............W.n.|
      000cf0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
      *
      002650 00 00 00 00 00 00 00 10 00 00 00 01 00 00 00 01 |................|
      002660 80 82 9a c4 80 85 97 80 81 a9 51 68 00 00 00 02 |..........Qh....|
      002670 80 25 44 dc 80 85 97 80 81 a9 50 24 81 ab c4 60 |.%D.......P$...`|
    
    This situation was first observed with kernel 5.4.x, cross-compiled for a
    MIPS target system. Fix by adding a sanity-check for export of zero-length
    data sections.
    
    Fixes: 341dfcf8 ("btf: expose BTF info through sysfs")
    Signed-off-by: default avatarTony Ambardar <Tony.Ambardar@gmail.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Acked-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Link: https://lore.kernel.org/bpf/b38db205a66238f70823039a8c531535864eaac5.1600417359.git.Tony.Ambardar@gmail.com
    e23bb04b
sysfs_btf.c 1.09 KB