When CONFIG_GCOV_PROFILE_ALL=y is enabled, GCC inserts branch profiling counters into skb_ext_total_length() and, combined with -fno-tree-loop-im from GCOV, prevents the compiler from constant-folding the loop that sums skb_ext_type_len[] array elements. This causes the compile-time BUILD_BUG_ON(skb_ext_total_length() > 255) check to fail, even though the actual computed value is well below 255. The kernel already has a guard for CONFIG_KCOV_INSTRUMENT_ALL, which causes the same problem. Add a similar guard for GCOV. The number of loop iterations matters: with 4 extension types (as in earlier kernels), GCC 11 can still constant-fold despite GCOV. With 5+ types (after SKB_EXT_CAN and other additions), it gives up. This is why the issue only manifests in recent kernels with GCOV enabled. Tested with GCC 11.4.1 and GCC 16.0.1 20260327 (experimental) - both exhibit the same behavior. Note that skb_ext_total_length() is still correct at runtime; this change only allows the build to succeed when GCOV_PROFILE_ALL is enabled for coverage analysis. Fixes: 5d21d0a65b57 ("net: generalize calculation of skb extensions length") Signed-off-by: Konstantin Khorenko --- net/core/skbuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 0e217041958a..98c3d4e63219 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5159,7 +5159,7 @@ static __always_inline unsigned int skb_ext_total_length(void) static void skb_extensions_init(void) { BUILD_BUG_ON(SKB_EXT_NUM > 8); -#if !IS_ENABLED(CONFIG_KCOV_INSTRUMENT_ALL) +#if !IS_ENABLED(CONFIG_KCOV_INSTRUMENT_ALL) && !IS_ENABLED(CONFIG_GCOV_PROFILE_ALL) BUILD_BUG_ON(skb_ext_total_length() > 255); #endif -- 2.43.5