Skip to content

Bug:位移溢出 #73

@PQHX-BLUE

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions