libbpf:sec 'sockops':未能在偏移量 0

问题描述

我想使用 bpftool prog load 将我的程序加载到内核中。但是,出现了一些错误

# bpftool prog load sockmap_update_kern.o "/sys/fs/bpf/bpf_sockmap"
libbpf: sec 'sockops': Failed to find program symbol at offset 0
Error: Failed to open object file

程序通过 LLVM version 6.0.0 编译得很好

#include <linux/bpf.h>
#include "bpf_helpers.h"

struct bpf_map_def SEC("maps") sock_map = {
    .type = BPF_MAP_TYPE_SOCKMAP,.key_size = sizeof(int),.value_size = sizeof(int),.max_entries = 10,};


SEC("sockops")
int sock_map_update(struct bpf_sock_ops *ops)
{
    __u32 op,family;
    int key;
    op = ops->op;
    family = ops->family;

    switch (op){
        case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
        case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
            if (family == 2){ //AF_INET
                key = 1;
                bpf_sock_map_update(ops,&sock_map,&key,BPF_ANY);
            }
        default:
            break;
    }
    return 0;
}

char _license[] SEC("license") = "GPL";
# readelf -a sockmap_update_kern.o
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement,little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Linux BPF
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          456 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         8
  Section header string table index: 1

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .strtab           STRTAB           0000000000000000  00000170
       0000000000000051  0000000000000000           0     0     1
  [ 2] .text             PROGBITS         0000000000000000  00000040
       0000000000000000  0000000000000000  AX       0     0     4
  [ 3] sockops           PROGBITS         0000000000000000  00000040
       0000000000000088  0000000000000000  AX       0     0     8
  [ 4] .relsockops       REL              0000000000000000  00000160
       0000000000000010  0000000000000010           7     3     8
  [ 5] maps              PROGBITS         0000000000000000  000000c8
       000000000000001c  0000000000000000  WA       0     0     4
  [ 6] license           PROGBITS         0000000000000000  000000e4
       0000000000000004  0000000000000000  WA       0     0     1
  [ 7] .symtab           SYMTAB           0000000000000000  000000e8
       0000000000000078  0000000000000018           1     2     8
Key to Flags:
  W (write),A (alloc),X (execute),M (merge),S (strings),I (info),L (link order),O (extra OS processing required),G (group),T (TLS),C (compressed),x (unkNown),o (OS specific),E (exclude),p (processor specific)

There are no section groups in this file.

There are no program headers in this file.

There is no dynamic section in this file.

Relocation section '.relsockops' at offset 0x160 contains 1 entry:
  Offset          Info           Type           Sym. Value    Sym. Name
000000000058  000300000001 unrecognized: 1       0000000000000000 sock_map

The decoding of unwind sections for machine type Linux BPF is not currently supported.

Symbol table '.symtab' contains 5 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000078     0 NOTYPE  LOCAL  DEFAULT    3 LBB0_3
     2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    6 _license
     3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    5 sock_map
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    3 sock_map_update

No version information found in this file.

我的内核版本是 5.3.0-42。我是通过 apt-get install 得到的,所以我猜内核有一些问题。你能给我一些建议吗?提前致谢。

# uname -a
Linux iZ2zehe0r5ccv5sse5ib5fZ 5.3.0-42-generic #34~18.04.1-Ubuntu SMP Fri Feb 28 13:42:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)