计算进程ID和线程ID(tgid和pid)拼接时发生了致命的位移溢出,这会导致上报的线程信息错误或引发内核验证器警告
位置:
bpf/observe/spinlock_ob.bpf.c :198 and 212
WRITE_ONCE(ls->acq_max_id, (li->tgid<< 32)| li->pid);
WRITE_oNCE(ls->hld_max_id,(li->tgid<<32)|li->pid);
原因:结构体1ockholder中的tgid定义为u32(32位无符号整数)。将 32位整数位移 32 位(<<32)会导致C
语言标准中的未定义行为
修改意见:在位移前,将 li->pid 显示转换为 u64
计算进程ID和线程ID(tgid和pid)拼接时发生了致命的位移溢出,这会导致上报的线程信息错误或引发内核验证器警告
位置:
bpf/observe/spinlock_ob.bpf.c :198 and 212
WRITE_ONCE(ls->acq_max_id, (li->tgid<< 32)| li->pid);
WRITE_oNCE(ls->hld_max_id,(li->tgid<<32)|li->pid);
原因:结构体1ockholder中的tgid定义为u32(32位无符号整数)。将 32位整数位移 32 位(<<32)会导致C
语言标准中的未定义行为
修改意见:在位移前,将 li->pid 显示转换为 u64