Skip to content

Bug:位移溢出 #73

Description

@PQHX-BLUE

计算进程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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions