hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
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: