return -EINVAL;
        }
 
-       if (meta_left < hdr->type_off) {
-               pr_debug("Invalid BTF type section offset:%u\n", hdr->type_off);
+       if (meta_left < hdr->str_off + hdr->str_len) {
+               pr_debug("Invalid BTF total size:%u\n", btf->raw_size);
                return -EINVAL;
        }
 
-       if (meta_left < hdr->str_off) {
-               pr_debug("Invalid BTF string section offset:%u\n", hdr->str_off);
+       if (hdr->type_off + hdr->type_len > hdr->str_off) {
+               pr_debug("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n",
+                        hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len);
                return -EINVAL;
        }
 
-       if (hdr->type_off >= hdr->str_off) {
-               pr_debug("BTF type section offset >= string section offset. No type?\n");
-               return -EINVAL;
-       }
-
-       if (hdr->type_off & 0x02) {
+       if (hdr->type_off % 4) {
                pr_debug("BTF type section is not aligned to 4 bytes\n");
                return -EINVAL;
        }