Skip to content

libbpf-starter-template 创建 bpf prog 构建失败 #19

@Ghostbaby

Description

@Ghostbaby

现象

eBPF prog 代码:

#define TASK_COMM_LEN 16

// 该 prog 用于拦截 do_unlinkat 系统调用,当删除文件时,打印文件名和进程名
SEC("kprobe/do_unlinkat")
int BPF_KPROBE(do_unlinkat, int dfd, struct filename *name)
{
    const char *filename;
    __u64 pid_tgid = bpf_get_current_pid_tgid();
    __u32 pid = (pid_tgid << 32) >> 32;
    __u32 tgid = pid_tgid >> 32;
    char comm[TASK_COMM_LEN];
    long ret;

    filename = BPF_CORE_READ(name, name);

    ret = bpf_get_current_comm(&comm, TASK_COMM_LEN);
    if(ret)
    {
        bpf_printk("Failed to get current task name, pid = %d\n", pid);
        return 1;
    }
    bpf_printk("KPROBE ENTRY pid = %d, filename = %s\n", pid, filename);
    return 8;
}  

构建报错:

# cd src
# make
  BPF      .output/bootstrap.bpf.o
bootstrap.bpf.c:116:16: error: A call to built-in function '__stack_chk_fail' is not supported.
int BPF_KPROBE(do_unlinkat, int dfd, struct filename *name)
               ^
1 error generated.

复现

  1. 使用模版创建 bpf 项目,参考文档:https://github.com/eunomia-bpf/bpf-developer-tutorial/blob/main/README.zh.md
  2. 将上述 eBPF prog 代码增加到 src/bootstrap.bpf.c 文件中。
  3. 进入 src 目录执行 make,复现上述构建失败现象。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions