Re: [PATCH 1/1] net: fix skb_ext_total_length() BUILD_BUG_ON with CONFIG_GCOV_PROFILE_ALL

From: Thomas Weißschuh

Date: Mon Mar 30 2026 - 11:14:13 EST


On 2026-03-30 16:53:37+0300, Konstantin Khorenko wrote:
> 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 <khorenko@xxxxxxxxxxxxx>

Reviewed-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx>

Would it help to mark skb_ext_total_length() as
'notrace'/'no_instrument_function'?


Thomas