从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 标题: - 描述:Lionel 发现了一个问题,即使用户和 BPF 程序的 BPF 映射(如 .rodata)被冻结,仍然可以通过特定的 helper 函数(具有 作为参数)写入它们。 2. 问题原因: - 函数在参数为指定类型时, 从未设置。 - 函数在使用 作为基址类型时,假设 BPF 读取权限,导致后续调用 时,即使 BPF 映射是只读的,也会成功。 3. 解决方案: - 修改 helper 函数的注释,将其标记为 ,表示当结果写入到它们时,它们实际上是未初始化的。 - 修改 为 ,并添加额外的对齐要求。 - 使用 与 注释的参数类型组合,以确保验证器在不知道缓冲区大小的情况下不会盲目写入。 4. 修复的文件: - - - - - - 5. 修复的代码片段: - 修改了 中的 结构体,添加了 和 的注释。 - 修改了 中的 helper 函数,调整了参数类型和大小。 - 修改了 中的 函数,调整了参数类型和大小。 - 修改了 中的 函数,调整了参数类型和大小。 - 修改了 和 中的 helper 函数,调整了参数类型和大小。 这些信息表明,修复了 BPF helper 函数在写入只读映射时的潜在安全漏洞,通过调整参数类型和大小,确保了在不知道缓冲区大小的情况下不会盲目写入。