Re: [PATCH] selftests: net: tcp_ao: don't shift a size_t by 32

From: Dmitry Safonov

Date: Wed Nov 04 2026 - 08:48:17 EST


On Tue, 3 Nov 2026 at 16:39, Sasha Levin <sashal@xxxxxxxxxx> wrote:
>
> gen_tcp_addr() shifts the size_t n right by 32 and masks it with BIT(32)
> - 1. On 32-bit architectures both shifts are as wide as the type, which
> is undefined:
>
> aolib.h:230:40: warning: right shift count >= width of type [-Wshift-count-overflow]
>
> Convert n to uint64_t first and mask with 0xffffffff.
>
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

Acked-by: Dmitry Safonov <0x7f454c46@xxxxxxxxx>

Thanks!

> ---
> Found with 32-bit builds of the selftests (gcc 16 and clang 21 with
> -m32, with and without -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64);
> KernelCI's 32-bit arm builds show the same warnings. The changed files
> build without them now, and the x86_64 builds don't change.
>
> tools/testing/selftests/net/tcp_ao/lib/aolib.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/net/tcp_ao/lib/aolib.h b/tools/testing/selftests/net/tcp_ao/lib/aolib.h
> index 53be1744237ee..71ff975533089 100644
> --- a/tools/testing/selftests/net/tcp_ao/lib/aolib.h
> +++ b/tools/testing/selftests/net/tcp_ao/lib/aolib.h
> @@ -226,8 +226,8 @@ static inline union tcp_addr gen_tcp_addr(union tcp_addr net, size_t n)
> union tcp_addr ret = net;
>
> #ifdef IPV6_TEST
> - ret.a6.s6_addr32[3] = htonl(n & (BIT(32) - 1));
> - ret.a6.s6_addr32[2] = htonl((n >> 32) & (BIT(32) - 1));
> + ret.a6.s6_addr32[3] = htonl((uint64_t)n & 0xffffffff);
> + ret.a6.s6_addr32[2] = htonl((uint64_t)n >> 32);
> #else
> ret.a4.s_addr = htonl(ntohl(net.a4.s_addr) + n);
> #endif
> --
> 2.53.0
>