]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
sched_ext: Use offsetofend on both sides of the ops_cid layout assert
authorTejun Heo <tj@kernel.org>
Fri, 8 May 2026 15:50:08 +0000 (05:50 -1000)
committerTejun Heo <tj@kernel.org>
Fri, 8 May 2026 16:08:01 +0000 (06:08 -1000)
sizeof() includes trailing struct pad, offsetofend() doesn't. On
32-bit PPC, sched_ext_ops_cid tail-pads 4 bytes past @priv and the
assert trips. Use offsetofend() on both sides.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202605081637.DbH4SZ1E-lkp@intel.com/
Fixes: 7e655ed7b953 ("sched_ext: Add bpf_sched_ext_ops_cid struct_ops type")
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index 7ac7d10a41befb47f7223b9ecceb386679f3c54f..f86ee15be7cb1a932de46263a5521bcd99dad7b8 100644 (file)
@@ -10380,9 +10380,11 @@ static int __init scx_init(void)
        /*
         * cid-form must end exactly at @priv - validate_ops() skips
         * cpu_acquire/cpu_release for cid-form because reading those fields
-        * past the BPF allocation would be UB.
+        * past the BPF allocation would be UB. offsetofend() on both sides
+        * instead of sizeof() on sched_ext_ops_cid to sidestep trailing
+        * struct padding (e.g. 32-bit PPC tail-pads ops_cid past @priv).
         */
-       BUILD_BUG_ON(sizeof(struct sched_ext_ops_cid) !=
+       BUILD_BUG_ON(offsetofend(struct sched_ext_ops_cid, priv) !=
                     offsetofend(struct sched_ext_ops, priv));
 #undef CID_OFFSET_MATCH