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

From: liujing

Date: Thu Sep 03 2026 - 05:12:46 EST


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;
}

enum map_def_parts {