https://seclists.org/oss-sec/2025/q1/48
tl;dr
glibc assert() 内部使用下面的结构存储 assert 失败消息:
这个结构会使用mmap分配出来,但是在计算分配大小时只计算了msg中的字符串的大小,没有考虑size字段的大小。当字符串的大小与页面大小的某个整数倍相差在4字节以内时便会发生缓冲区溢出。
tl;dr
glibc assert() 内部使用下面的结构存储 assert 失败消息:
struct abort_msg_s
{
unsigned int size;
char msg[0];
};
这个结构会使用mmap分配出来,但是在计算分配大小时只计算了msg中的字符串的大小,没有考虑size字段的大小。当字符串的大小与页面大小的某个整数倍相差在4字节以内时便会发生缓冲区溢出。