复现原始Bug
在作者的paper中可以了解到, 发现该漏洞的起因不是专门的漏洞挖掘工作, 而是关于日志服务器多次出现的文件错误, 用户下载的包含日志的gzip文件多次出现CRC校验位错误, 排查后发现..., 指示内核继续向同一个页面继续写入数据, 而不是获取一个新的页面进行写入。...函数中未能正确清除页面的"PIPE_BUF_FLAG_CAN_MERGE"属性, 导致后续进行pipe_write()操作时错误的判定"write操作可合并(merge)", 从而将非法数据写入文件页面缓存...正是如此, copy_page_to_iter_pipe()中对buf->ops的初始化操作已经不包含can_merge属性初始化的功能了, 只是push_write()中merge操作的判断依然正常,...拓展与总结
关于该漏洞的一些限制:
显而易见的, 被覆写的目标文件必须拥有可读权限, 否则splice()无法进行;
由于是在pipe_buffer中覆写页面缓存的数据, 又需要splice()读取至少