ProcessorFuzz

简介

论文名称:ProcessorFuzz: Processor Fuzzing with Control and Status Registers Guidance

论文地址:https://arxiv.org/abs/2209.01789
ProcessorFuzz*:一个处理器模糊测试工具,通过一种新颖的CSR转换覆盖度度量来指导模糊测试。ProcessorFuzz监控控制和状态寄存器(CSRs)中的转换,因为CSRs负责控制和保存处理器的状态。因此,CSRs中的转换表示新的处理器状态,基于这一反馈指导模糊测试使ProcessorFuzz能够探索新的处理器状态。

现有的模糊测试工具

处理器模糊测试的研究主要集中在解决两个主要挑战:

  • 软件Fuzz中的覆盖率(基本块、分支覆盖等)是基于程序的控制流,而硬件Fuzz中的覆盖率指标是基于处理器的状态。所以硬件Fuzz中的覆盖率度量是一个挑战。

  • 软件程序在测试期间通过引发内存违规错误或引发异常来指示错误的情况不同,处理器设计中的错误不会导致可观察的异常(即崩溃)。

解决第一个挑战:

  • 引入了各种覆盖度指标(多路复用器切换覆盖和寄存器覆盖)。
  • 但是寄存器覆盖对处理器模糊测试工具有一定的误导性,例如difuzzrtl中的数据通路寄存器,这些寄存器引起的覆盖率度量的增加并不提供有关处理器当前的状态的有意义的信息,导致模糊测试时间的浪费。

解决第二个挑战:

  • 将寄存器传输级(RTL)模拟器的结果与指令集体系结构(ISA)模拟器的结果进行比较。

ProcessorFuzz

两个特性:

  • ProcessorFuzz使用一种称为CSR-transition覆盖度的新覆盖度度量,有效地引导处理器模糊测试

  • 使用ISA模拟来快速确定测试输入是否 Interesting。先前的工作依赖于RTL模拟来达到相同的目标。

Design

在这里插入图片描述

  • 阶段(1)一个空的种子语料库。通过生成一组符合目标ISA的汇编程序形式的随机测试输入来填充种子语料库。
  • 阶段(2)中,ProcessorFuzz从种子语料库中选择一个测试输入,然后在所选输入上应用一组变异(例如删除指令、追加指令或替换指令)在阶段(3)中。
  • 阶段(4)ProcessorFuzz使用一个变异输入运行ISA模拟器,并生成一个包括每个执行指令的CSRs值的扩展ISA跟踪日志。Transition Unit(TU)接收ISA跟踪日志,提取在CSRs中发生的转换。
  • 阶段(5)中将每个转换与Transition Map(TM)进行交叉检查,如果观察到的转换在TM中不存在,则将其分类为唯一的转换,并将其添加到TM中。如果当前测试输入触发了至少一个新的转换,则将该输入视为Interesting,并将其添加到种子语料库中进行进一步的变异。否则,将丢弃该输入。
  • 阶段(6),ProcessorFuzz仅使用有趣的变异输入运行目标处理器的RTL模拟。RTL模拟还生成类似于扩展ISA跟踪日志的扩展RTL跟踪日志。
  • 阶段(7)中,比较ISA跟踪日志和RTL跟踪日志。日志之间的任何不匹配都表示可能存在的错误,通常需要由验证工程师通过手动检查进行确认。

ISA模拟的反馈

ProcessorFuzz的一个设计特点是它依赖于ISA模拟来确定测试输入是Interesting
原因:

  1. ISA模拟器通常在执行给定程序时比RTL模拟器快得多。ProcessorFuzz可以快速确定测试输入是否Interesting,而无需执行缓慢的RTL模拟。

  2. 减少对模拟器进行工具化的工作量。

    1. 工作量:可以通过扩展已有的跟踪逻辑与所选CSR一起,轻松地对ISA模拟器进行工具化;对RTL设计进行工具化以提取CSRs的转换是一项繁重的工作。
    2. 拓展性:一个HDL中的工具化不容易转换到其他HDL。

CSR转换覆盖度

Description of the Metric

  • CSRs是ISA规范中的系统寄存器,用于控制(例如委托异常)或保存关于处理器当前体系结构状态的信息(例如浮点单元的状态)。

  • CSR中的值变化通常表示体系结构状态的变化,例如存储异常代码或特权级别的CSR中的值变化表示异常的发生或特权级别的变化。

  • CSR过渡可以从处理器设计的ISA模拟器或RTL模拟中提取.ProcessorFuzz监视由前一条和当前指令执行导致的CSR值,并检查它们是否不同。

  • 在这里插入图片描述
    Why Transitions Instead of Values?

  • 最重要的原因是使用寄存器值作为覆盖率会丢弃重要的测试输入,如图:

  • 在这里插入图片描述

  • 处理器从N0状态开始,错误仅在N2状态中触发,并且前个一状态为N1,如果N1(通过P0过渡)和N2(通过P2过渡)分别被覆盖,对于P1状态过渡的覆盖不会增加。该模糊测试工具会话未能触发错误。

  • 监视过渡,即使N1和N2状态已经被覆盖,我们也可以检测到P1作为一个新的过渡。

  • 监视CSRs中的新过渡,而不仅仅是识别唯一的CSR值,以提高反馈度量的灵敏度

CSR Selection

ISA规范通常规定了大量的CSRs3,但是并非所有的CSRs都是有用的。(例如,instret CSR, 处理器每提交一条指令都会导致CSR过渡)。ProcessorFuzz监视过渡的CSRs时引入了以下两个标准:

  • CSR Selection C1:选择包含有关处理器状态的状态信息的CSRs(标准C1),因为它们直接揭示了处理器的当前状态。(例如mcause)
  • CSR Selection C2:选择用于在处理器中设置某个配置的任何CSR(标准C2),可以了解处理器在不同配置下是否按预期运行。(例如medeleg)

Transition Unit

Filtering Transitions(过渡过滤)

  • 并非所有CSR过渡都代表与测试处理器相关的有趣的架构状态变化,ProcessorFuzz应用过滤器来删除不必要的过渡。
  • 对状态CSR的显式写入引起的过渡类型不会影响处理器的架构状态,因此不会被视为有趣的过渡。例如,对于mcause CSR的显式写入不会导致有趣的过渡,因为它不会影响处理器的架构状态。
  • ProcessorFuzz过滤掉从对状态CSR的显式写入引起的过渡。

Grouping Transitions(可选阶段)

ProcessorFuzz允许灵活定制CSR过渡覆盖度量,以适用于单独验证不同的架构单元(AU),也可以对TU对过渡进行分组以减少状态空间的大小。

Transition Map

ProcessorFuzz维护一个过渡图来存储CSR过渡。过渡都以元组的形式存储在图中: ( I m , S 0 , S 1 ) (I_m,S_0,S_1) ImS0S1

  • I M I_M IM : CSR过渡的指令的助记符
  • S 0 S_0 S0 S 1 S_1 S1是过渡之前和之后的CSR值
  • 查询映射以检查检测到的过渡是否是新的还是重复的.
  • 确定为包含新过渡的元组将被添加到映射中,并标记当前的测试输入为Interesting
  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值