create_attr.key_size = def->key_size;
                create_attr.value_size = def->value_size;
                create_attr.max_entries = def->max_entries;
-               create_attr.btf_fd = -1;
+               create_attr.btf_fd = 0;
                create_attr.btf_key_type_id = 0;
                create_attr.btf_value_type_id = 0;
                if (bpf_map_type__is_map_in_map(def->type) &&
                }
 
                *pfd = bpf_create_map_xattr(&create_attr);
-               if (*pfd < 0 && create_attr.btf_fd >= 0) {
+               if (*pfd < 0 && (create_attr.btf_key_type_id ||
+                                create_attr.btf_value_type_id)) {
                        cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
                        pr_warning("Error in bpf_create_map_xattr(%s):%s(%d). Retrying without BTF.\n",
                                   map->name, cp, errno);
-                       create_attr.btf_fd = -1;
+                       create_attr.btf_fd = 0;
                        create_attr.btf_key_type_id = 0;
                        create_attr.btf_value_type_id = 0;
                        map->btf_key_type_id = 0;
        load_attr.license = license;
        load_attr.kern_version = kern_version;
        load_attr.prog_ifindex = prog->prog_ifindex;
-       load_attr.prog_btf_fd = prog->btf_fd;
+       load_attr.prog_btf_fd = prog->btf_fd >= 0 ? prog->btf_fd : 0;
        load_attr.func_info = prog->func_info;
        load_attr.func_info_rec_size = prog->func_info_rec_size;
        load_attr.func_info_cnt = prog->func_info_cnt;