https://seclists.org/oss-sec/2025/q1/48

tl;dr
glibc assert() 内部使用下面的结构存储 assert 失败消息:

struct abort_msg_s
{
  unsigned int size;
  char msg[0];
};

这个结构会使用mmap分配出来,但是在计算分配大小时只计算了msg中的字符串的大小,没有考虑size字段的大小。当字符串的大小与页面大小的某个整数倍相差在4字节以内时便会发生缓冲区溢出。
 
 
Back to Top