[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 {