Hi Andrii, Is there are better way to validate that a userspace BPF-program uses the correct map via BTF? Below and in attached patch, I'm using bpf_obj_get_info_by_fd() to get some map-info, and check info.value_size and info.max_entries match what I expect. What I really want, is to check that "map-value" have same struct layout as: struct config { __u32 action; int ifindex; __u32 options; }; -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer static void check_config_map_fd_info(int map_fd) { struct bpf_map_info info = { 0 }; __u32 info_len = sizeof(info); __u32 exp_value_size = sizeof(struct config); __u32 exp_entries = 1; int err; /* BPF-info via bpf-syscall */ err = bpf_obj_get_info_by_fd(map_fd, &info, &info_len); if (err) { fprintf(stderr, "ERR: %s() can't get info - %s\n", __func__, strerror(errno)); exit(EXIT_FAIL_BPF); } if (exp_value_size != info.value_size) { fprintf(stderr, "ERR: %s() " "Map value size(%d) mismatch expected size(%d)\n", __func__, info.value_size, exp_value_size); exit(EXIT_FAIL_BPF); } if (exp_entries != info.max_entries) { fprintf(stderr, "ERR: %s() " "Map max_entries(%d) mismatch expected entries(%d)\n", __func__, info.max_entries, exp_entries); exit(EXIT_FAIL_BPF); } } struct config { __u32 action; int ifindex; __u32 options; };