hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/tools/lib/bpf/btf.c
....@@ -614,8 +614,21 @@
614614 if (align <= 0)
615615 return align;
616616 max_align = max(max_align, align);
617
+
618
+ /* if field offset isn't aligned according to field
619
+ * type's alignment, then struct must be packed
620
+ */
621
+ if (btf_member_bitfield_size(t, i) == 0 &&
622
+ (m->offset % (8 * align)) != 0)
623
+ return 1;
617624 }
618625
626
+ /* if struct/union size isn't a multiple of its alignment,
627
+ * then struct must be packed
628
+ */
629
+ if ((t->size % max_align) != 0)
630
+ return 1;
631
+
619632 return max_align;
620633 }
621634 default: