Re: [PATCH] tools libbpf: Fix signed shift UB in btf_type_info()

From: Andrii Nakryiko

Date: Fri Sep 11 2026 - 13:40:05 EST


On Thu, Sep 3, 2026 at 1:26 AM liujing <liujing@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> From: Liu Jing <liujing@xxxxxxxxxxxxxxxxxxxx>
>
> In btf_type_info(), the expression `kflag << 31` performs a signed
> integer shift. When kflag is 1, this sets the sign bit of a 32-bit
> signed integer, which is undefined behavior in C.
>
> Fix it by casting kflag to unsigned int before the shift.
>
> Signed-off-by: Liu Jing <liujing@xxxxxxxxxxxxxxxxxxxx>
> ---
> --- a/tools/lib/bpf/libbpf_internal.h
> +++ b/tools/lib/bpf/libbpf_internal.h
> @@ -259,7 +259,7 @@
>
> static inline __u32 btf_type_info(int kind, int vlen, int kflag)
> {
> - return (kflag << 31) | (kind << 24) | vlen;
> + return (((unsigned int)kflag << 31)) | (kind << 24) | vlen;

this was recently fixed as part of slightly bigger set of fixes of the
similar kind

pw-bot: cr

> }
>
> enum map_def_parts {
>
>
>
>