当新的内核版本发布之后,需要停止对前一版本内核的模糊测试,改为对新内核做测试。上一次测试得到的种子库可以复用在新的测试中,但如果种子库过于冗余,即大量种子覆盖同一路径,则会浪费计算资源,所以需要对种子库做筛选。另外,为了测试更多的arch/riscv下的代码,在种子库筛选时,会只保留触发了arch/riscv代码路径下的种子。
这需要在模糊测试进行的时候,对于每一个加入到种子库中的种子,都需要保存其所触发的路径(addr),这个路径可以通过syzkaller的config文件来指定。
比如每个种子所触发的路径放在了corpus-info路径下,那么种子库有多少个种子,该路径下就有多少个文件,每个文件以种子的hash值命名,每个文件的内容是种子所触发的路径,每行一个addr。
然后需要借助vmlinux和addr2line,把每个地址转换成对应的文件和行号。把不触发arch/riscv下代码的种子挑选出来,用一个文件记录需要删掉的种子的hash值。
通过syz-db unpack来把种子库解包,然后根据前面的要删除的种子的hash清单,删除相应的种子文件,然后再syz-db pack打包。