从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 漏洞名称:uprobe: avoid out-of-bounds memory access of fetching args - 漏洞描述:uprobe 需要将 args 读入到 percpu 缓冲区,并且复制到环缓冲区以避免非原子上下文问题。有时,用户空间字符串或数组可能非常大,但 percpu 缓冲区的大小仅为一页大小。store_trace_args() 函数不会检查这些数据是否超过单页,导致越界内存访问。 2. 漏洞复现步骤: - 1. 使用 CONFIG_KASAN 开启内核。 - 2. 编译程序为 test.c。 - 3. 获取 的偏移量。 - 4. 在/sys/kernel/debug/tracing/目录下配置uprobes。 - 5. 运行 程序,Kasan 将报告错误。 3. 漏洞触发条件: - 当字符串长度大于 MAX_STRING_SIZE 时,fetch_store_strlen() 函数将返回 0,导致 _get_data_size() 返回较短的大小,store_trace_args() 函数不会触发越界内存访问。因此,需要将字符串长度设置为小于 4096。 4. 修复措施: - 通过限制缓冲区的最大长度,避免 store_trace_args() 出现越界内存访问。 5. 相关链接: - 漏洞详情 - 修复补丁 6. 修复补丁: - 修复补丁位于 文件中,修复了缓冲区大小的限制。 这些信息可以帮助我们理解漏洞的背景、复现步骤、触发条件以及修复措施。