Atomicity Violation Detection for Interrupt-Driven Aerospace Embedded Software
-
摘要:
嵌入式软件的可信性对航天任务的成败至关重要. 航天嵌入式软件广泛采用中断驱动的并发机制, 不确定的中断抢占可能导致并发缺陷, 引发严重的安全问题. 研究表明原子性违反是中断并发缺陷中最突出的一类缺陷模式. 目前面向中断驱动型嵌入式软件的原子性违反检测方法都无法同时实现高精度和高可扩展性, 且其对真实航天嵌入式软件的有效性尚未得到证实. 为了有效提升检测该类缺陷的精度与效率, 对82个航天嵌入式软件原子性违反进行实证研究, 获得该类缺陷在原子区范围、中断嵌套层数、访问交错模式、共享数据访问方式、访问粒度等5个方面的表现特征. 并在此基础上, 提出一个精确、高效的原子性违反静态检测方法intAtom-S. 首先, 基于一个由数值不变式参数化的细粒度内存访问模型, 引入基于规则的方法剔除标志变量访问, 并采用抽象解释进行精确的共享数据分析, 该分析能将共享数据访问粒度精确至数组元素, 并可识别共享的内存映射I/O地址. 然后, 使用轻量级数据流分析技术匹配符合缺陷访问交错模式的所有并发三次访问序, 作为潜在的原子性违反缺陷候选. 最后, 采用基于路径条件的约束求解对缺陷候选中的串行访问对和并发三次访问序进行路径可行性分析, 逐步消除误报, 得到最终的原子性违反结果. 在基准测试集和8个真实航天嵌入式软件上的实验表明, 与目前最先进的方法相比, intAtom-S误报率降低了72%, 检测效率提高了3倍. 此外, 该方法能够快速完成对真实航天嵌入式软件的分析, 平均误报率仅为8.9%, 并发现了23个已被开发人员确认的缺陷.
Abstract:The dependability of embedded software is vital to the success of the aerospace mission. Aerospace embedded software extensively uses interrupt-driven concurrency mechanisms. However, uncertain interleaving execution of interrupts may cause concurrency bugs, which could result in serious safety problems. Researches had showed that atomicity violation was the most prominent interrupt concurrency bug. Current atomicity violation detection methods for interrupt-driven embedded software cannot achieve both high precision and high scalability, and their effectiveness on real embedded software has not been evaluated. To significantly improve the ability of techniques in bug detection, we design an empirical study on 82 atomicity violations in aerospace embedded software and gain their manifestation characteristics of atomic region range, the number of interrupt nesting levels, shared data access interleaving pattern, access patterns and access granularities. On this basis, we present intAtom-S, a precise and efficient static detection technique for atomicity violations. Firstly, to realize accurate analysis of shared data, intAtom-S constructs a fine-grained memory model parameterized by numerical invariants, and introduces rule-based method to eliminate flag variable accesses. Moreover, it can handle array elements as well as shared I/O addresses. Then, a lightweight data flow analysis technique is used to find all access interleavings that match the patterns as potential bug candidates. Finally, intAtom-S adopts a consecutive access pair feasibility analysis and access interleaving feasibility analysis to prune the infeasible paths. intAtom-S gradually eliminates false positives, and obtains the final atomicity violations. Experiments on a benchmark and 8 real-world aerospace embedded software show that intAtom-S reduces the false positive rate by 72% and improves the detection speed by 3 times, compared with the state-of-the-art methods. Furthermore, it can finish analyzing the real-world aerospace embedded software very fast with an average false positive rate of 8.9%, while finding 23 bugs that had been confirmed by developers.
-
国密SM4算法[1]是一种常用的分组密码算法,广泛应用于数据保护、加密通信等领域. SM4算法常见工作模式有ECB(electronic codebook),CBC(cipher block chaining)等,对于相同的明文块,ECB模式下会产生完全相同的密文,而在CBC模式下,当前的明文块会与前一块的密文异或后进行运算. 因此,即使是完全相同的明文输入也可能会有完全不同的密文输出. 相比于ECB模式,CBC模式提供了更高的安全性和抵抗攻击的能力,有着更高的应用需求. 提高SM4算法在CBC模式下的性能,对于在边缘设备中使用SM4算法是至关重要的. 但是,在CBC模式下存在着难以提高吞吐率的问题:每组的输入必须等待前一组运算结束后才能获得,因而难以使用流水线方法提升吞吐率.
文献[2]中提到了一种改进方法,将电路中的S盒以外的其他逻辑结构进行预计算,并把预计算的结果与S盒进行融合构成新的查找表,从而提高SM4算法在CBC模式下吞吐率. 本文基于此工作进一步优化了S盒的表示,并针对轮函数的迭代过程进行了优化,最终减少了轮函数关键路径上的2次异或运算,有效提高了算法的性能.
本文的设计针对CBC模式下的SM4算法,在TSMC 40 nm,SMIC 55 nm工艺下,使用Synopsys Design Compiler分别进行了ASIC综合. 综合结果显示,本文所提出的设计在CBC模式下的吞吐率达到了4.2 Gb/s,同时单位面积吞吐量达到了129.4 Gb·s−1·mm−2,明显优于已发表的类似设计. 这些结果表明本文所提出的化简方法在改进SM4算法性能方面具有很大的潜力.
本文的结构为:首先介绍了SM4算法及其在CBC模式下存在的性能瓶颈问题. 然后,详细描述了本文提出的2个化简方法,并解释了它们在轮函数迭代和S盒置换过程中的作用. 接下来,介绍了实验设计并给出了实验结果分析和对比. 最后,对进一步改进和应用的方向进行了展望.
1. SM4算法介绍
SM4算法是一种对称密钥密码算法,被广泛应用于数据加密和保护领域,它是中国密码算法的标准之一,具有较高的安全性和良好的性能.
SM4采用了分组密码的设计思想,将明文数据划分为128 b的数据块,并通过密钥对每个数据块进行加密和解密操作. 对单组数据进行加解密的流程如图1所示,分为密钥扩展算法和加解密算法2部分. 图1中的FK是系统预设的参数,与用户密钥进行异或运算后作为密钥扩展算法的输入. 加解密算法接受密钥扩展算法产生的32轮轮密钥rki对明文进行加解密,最后经反序变换输出. 加解密使用的是同一套计算流程,唯一的区别是解密时使用轮密钥的顺序与加密过程相反.
密钥扩展算法和加解密算法2部分均由32次轮函数迭代构成,整体结构均采用4路并行的Feistel结构,在计算过程中,以128 b数据为输入、128 b数据为输出,其内部的运算逻辑如图2所示. 输出中的前96 b数据等于输入中的后96 b数据,输出后的32 b数据通过轮函数运算产生.
在密钥扩展算法中使用的密钥是算法给定的固定密钥,记作cki. 在加解密算法中使用的密钥是由密钥扩展算法通过用户给的密钥扩展出来的轮密钥,记作rki.
1.1 SM4密钥扩展算法
SM4密钥扩展算法结构如图3所示,密钥扩展的主要过程包括32轮密钥扩展的轮函数,其中,密钥为128 b,FK为SM4标准中规定的一个128 b常数. 二者异或后的值将会作为密钥扩展轮函数的首轮输入,并通过一个选择器进行循环迭代,总计迭代32轮产生32个轮密钥.
设用户输入的密钥为MK,则该密钥对应的32轮轮密钥可以按照式(1)求出:
{(k0,k1,k2,k3)=MK⊕FK,ki+4=ki⊕F(ki+1⊕ki+2⊕ki+3⊕cki),rki=ki+4, (1) 其中,cki是系统预设的32 b参数,rki代表第i轮的轮密钥,F代表密钥扩展轮函数,其由S盒置换算法τ:Z322→Z322和线性变换算法L(x)=x⊕(x<<<13)⊕(x<<<23)组成,其中<<<表示循环左移运算.
1.2 SM4加解密算法
SM4算法的加解密算法的整体结构与密钥扩展算法类似,均包含32轮的轮函数迭代,区别在于加解密算法中额外包含1次反序变换.
SM4算法的轮函数迭代流程如图4所示,X1~X4为第1轮的输入,X2~X5为第1轮的输出,同时也是第2轮的输入. rk1为第1轮的轮密钥,T函数代表加解密模块的轮函数. 与密钥扩展部分的轮函数F类似,由S盒置换算法τ和一个线性变换算法L′(x)=x⊕(x<<<2)⊕(x<<<10) ⊕(x<<<18)⊕(x<<<24)组成.
2. 对SM4加解密算法关键路径的化简
通过多轮的迭代过程,SM4算法能够实现高强度的数据加密和解密. 然而,在CBC模式下,由于相邻数据之间的依赖关系,传统的流水线技术难以提高算法的吞吐率. 因此,针对这一问题,本文提出了2种化简方法,以减少关键路径上的运算,从而提高SM4算法在CBC模式下的性能.
2.1 轮函数优化
加解密模块的轮函数的结构如图4所示,若不考虑T函数带来的时序延迟,单次轮函数迭代的关键路径上共包含3次异或运算. 以公式的形式描述SM4算法加解密轮函数的迭代关系可得到式(2):
Xi+4=Xi⊕(Xi+1⊕Xi+2⊕Xi+3⊕rki). (2) 若考虑相邻的2次轮函数迭代,则有:
{Xi+4=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),Xi+5=Xi⊕T(Xi+2⊕Xi+3⊕Xi+4⊕rki+1). (3) 观察式(1)~(3)不难发现,由于SM4采用了4条数据线路的Feistel结构进行设计,在相邻的2次轮函数迭代过程中,均有96 b的输入是完全一致的,在式(3)的计算过程中,相邻2轮的轮函数将Xi+2⊕Xi+3计算了2次.
因此,一个简单的优化思路便是,我们在轮函数之间传递数据时,额外传递Xi+2⊕Xi+3⊕rki+1的运算结果,并作用于下一次计算,得到的流程图如图5所示.
相比于图4的运算流程,在计算当前轮次的输出时,二次优化过后的轮函数通过提前获取下一轮次使用的密钥,并利用2轮之间相同的数据提前计算,可以使得在加解密的流程中总计节省32次异或运算的时间.
2.2 S盒性能优化
S盒是密码学领域的一个基本组件,其功能是实现数据的非线性变换,在DES,AES,SM1,SM4等算法中均有应用. 在SM4算法中,其提供了一个8 b到8 b的非线性变换.
在SM4算法中,S盒模块通常与另一个线性变换函数L′组合使用,即图4和图5中的T函数,其位于加解密算法轮函数的关键路径上,因此,如果能找到优化T函数关键路径的方法延时,也可以使得整个加解密模块的延时变小,进而提高运算效率.T函数的内部结构如图6所示,图中的<<<表示对32 b数据进行循环左移,关键路径包括1个S盒和3次异或运算. 在硬件实现中,循环移位可以通过硬件连线来实现,不会带来额外的路径延时.
T函数中包含4次异或运算,反映到电路设计中,其关键路径上至少存在3次异或运算. 因此,一个优化思路便是,将算法中的S盒的输入输出修改为8 b输入、32 b输出[2-3] ,并提前将L′函数作用于图中的4个S盒,如图7所示. 图7中,通过编码的形式保存其运行结果,将图6中的SBox与后续的线性变换L′组合形成exSBox,之后仅需要将4个exSBox的输出异或即可,从而减少了1次异或运算.
虽然修改后的S盒比原先的S盒输出了更多的数据,但在硬件实现中,仍然是通过相同数量的多路选择器查表输出. 因此修改前后的S盒的路径延时及其安全性并未改变.
2.3 S盒面积优化
以图7中的exSBox1为例,使用0xff作为输入展示exSBox1的构造方式,首先获得0xff作用于S盒后的运行结果0x48. 由于exSBox1的输入对应最高四位,因此,将其拓展为32 b数据为0x48000000. 在经过L′函数后,得到的值是0x68492121. 如表1所示,表中前5行加粗部分表示传入的数据及其循环移位后所处位置,其余位置在任意输入下都恒等于0.
表 1 搜索空间降低比率和命中率Table 1. Search Space Reduction Rate and Hit Rate原数据 01001000 00000000 00000000 00000000 <<<2 00100000 00000000 00000000 00000001 <<<10 00000000 00000000 00000001 00100000 <<<18 00000000 00000001 00100000 00000000 <<<24 00000000 01001000 00000000 00000000 异或和 01101000 01001001 00100001 00100001 注:加粗部分表示传入的数据及其循环移位后所处位置. 观察表1的运算结果不难发现,除最后一行加粗数字表示的第0~5位,第14,15位由异或运算产生,其余的24位均是输入的8位数据的排列组合,因此在硬件设计时,可以仅使用8 b输入、16 b输出的S盒实现. 对于图7中剩余的3个exSBox,在相同的输入下,可以通过对表1中的数据进行循环移位,得到对应的输出. 上述结论对4个位于不同部位的S盒均成立.
具体而言,令p为输入的8 b数据,τ(p)为标准SM4算法中S盒的输出. X=(x0,x1,⋯,x15)为exSBox1中存储的16 b数据,Y=(y0,y1,⋯,y31)为优化后的T函数中需要的32 b输出. τ为SM4算法标准中使用的S盒置换函数,其对于8 b输入,产生对应的8 b输出,则X可以由式(4)产生:
{(x0,x1,⋯,x7)=τ(p),(x8,x9,⋯,x15)=τ(p)⊕(τ(p)<<<2). (4) 由表1可知,Y的取值实际上可以由X经过排列组合得到,对于exSBox2,exSBox3,exSBox4的取值,可以通过Y循环移位得到,且由于该过程中仅包含赋值运算,在电路设计中可以通过物理连线完成. 相比于文献[2]中的设计,节约了1/3的面积消耗. 具体的计算方式如式(5)所示.
{(y0,y1,⋯,y5)=(x8,x9,⋯,x13),(y6,y7)=(x6,x7),(y8,y9,⋯,y13)=(x0,x1,⋯,x5),(y14,y15)=(x14,x15),(y16,y17,⋯,y21)=(x2,x3,⋯,x7),(y22,y23)=(x0,x1),(y24,y25,⋯,y29)=(x2,x3,⋯,x7),(y30,y31)=(x0,x1). (5) 3. 硬件实现与实验对比
现场可编程逻辑门阵列(FPGA)和专用集成电路(ASIC)是目前主流使用硬件电路实现密码算法的2个方式. FPGA虽然具有可编程性、灵活性和快速设计等优势,但ASIC相较于FPGA拥有更高的性能,与本文设计追求的高效率目标相符,所以选择在ASIC下实现.
3.1 硬件整体设计
SM4硬件系统的整体结构设计如图8所示,包括密钥扩展模块、加解密模块和适配CBC工作模式的组合逻辑. 对于单个加解密任务,若明文被分为n组,会执行1次密钥扩展和n次加解密. 因此,优化加解密算法的执行效率是优化SM4硬件设计的重点. 本文所提出的2种化简方法,对于每一组明文输入,可以减少64级异或门的延时,极大地提升了运算效率.
3.2 加解密模块设计
SM4算法的硬件实现主要有2种方案:一种方案是流水线结构,即通过寄存器连接多个加解密模块同时工作以提高加解密的效率,如图9(a)所示;另一种方案是使用循环迭代的方式. 即一次性提取32个轮函数中的n轮组合成一个组合电路,称为n合1电路,如图9(b)所示. 流水线结构的优势是可以充分利用n个加密核心的性能,在不影响整体工作频率的情况下加速运算. 对于SM4算法而言,在合理范围内堆叠流水线可以实现极高的吞吐量.
然而,流水线结构仅适用于ECB等数据无前后依赖的工作模式. 在CBC工作模式下,由于需要将前一轮的输出与本轮的输入进行异或运算,相邻的数据存在依赖,故而无法使用流水线加速运算. 因此,在本设计中没有选用流水线结构.
虽然循环迭代结构会降低整体模块的工作频率,对吞吐量的提升较为有限,但可以同时兼容 ECB,CBC这 2种工作模式. 本设计最终选择了循环迭代的设计方式.
3.3 密钥扩展模块设计
在SM4算法中,密钥扩展与加解密算法类似,均包含32轮迭代. 密钥扩展模块采用图2所示的单轮组合逻辑电路循环32次来实现32轮迭代.
在密钥扩展模块的输出端,使用寄存器存放每一轮电路的轮密钥,标号为0~31,如图10所示. 标号从0开始的好处是:在解密时,使用到的密钥顺序相反的,加密的第k轮使用的是第k−1号密钥,解密的第k轮使用的是第32−k号密钥. 在二进制下,二者的标号可以通过取反操作相互转化.
为了保证运算结果的准确性,密钥扩展模块还 会向加解密模块发出控制信号表明自己的工作状态,以避免在轮密钥尚未完全更新时使用错误的轮密钥进行加解密.
3.4 综合验证方案
在国家标准文档[1]中,并没有针对CBC工作模式给出具体的测试用例. 因此,本文设计方案通过完整的Verilog HDL语言实现,通过在FPGA平台进行综合、仿真和上板验证,以确保功能正确并进行相关性能分析,如图11所示. 具体而言,通过PCIE上位机下发随机的明文数据到FPGA开发板,开发板完成加密后传回上位机,通过与软件对比实现功能验证. 若在循环验证多次后二者的输出均完全相同,则认为设计的SM4电路的功能正确.
最终,本文的设计在Zynq 7020 FPGA开发板上完成了上板验证,确保了功能的正确性,工作频率最高可达95 MHz,吞吐量约为1.5 Gb/s.
3.5 ASIC综合结果
ASIC上主要针对2种工艺SMIC 55 nm与 TSMC 40 nm进行了测试、通过Synopsys公司的EDA工具DesignCompiler进行时序等综合约束,我们选择了芯片面积和芯片使用的逻辑门数量(gates)作为评估指标,其结果如表2和表3所示,在CBC模式下,本文的设计在3.97 mW的功耗下,单位面积吞吐率达129.4 Gb·s−1·mm−2,明显优于同类设计. 此外,以使用逻辑门的数量为评估标准,本文提出的设计在该指标上也明显优于同类设计,单位面积吞吐率为0.205×10−3 Gb·s−1·gates−1.
表 2 SM4综合结果与面积效率对比Table 2. Comparison of SM4 Synthesis Results and Area Efficiency表 3 SM4综合结果与门效率对比Table 3. Comparison of SM4 Synthesis Results and Gates Efficiency在不同工艺、电压下对该设计进行综合,可以得到本文设计在不同使用场景下的吞吐率. 在TSMC 40 nm、SMIC 55 nm、SMIC 130 nm下使用不同的工艺角分别对本文的设计进行综合,结果如表4所示.
表 4 不同工艺角下的SM4综合结果与效率对比Table 4. Comparison of SM4 Synthesis Results and Efficiency with Different Process Corners工艺节点 工艺角 面积/gates 吞吐率/(Gb·s−1) 功耗/mW 40 nm 0.99V/125°C/SS 21.0×103 2.40 2.55 1.1V/25°C/TT 21.2×103 4.34 3.97 1.21V/0°C/FF 20.9×103 6.96 8.35 55 nm 1V/25°C/TT 20.0×103 2.78 4.10 1.2V/25°C/TT 21.1×103 4.41 10.88 1.32V/0°C/FF 17.8×103 6.84 33.59 130 nm 1.08V/125°C/SS 20.8×103 1.11 6.86 1.2V/25°C/TT 21.0×103 1.75 15.70 1.32V/0°C/FF 21.8×103 2.45 23.03 4. 结 论
根据本文提出的2种对SM4加解密模块关键路径进行化简以及降低面积的方法,实现了4合1的SM4电路,并基于Zynq7020开发板进行了功能验证. 此外,ASIC综合结果表明本文的SM4电路相比于其他方案有更高的单位面积吞吐率和更低的功耗. 因此,这种对SM4算法进行的优化是有效的,并且对其他分组算法提高CBC模式下的单位面积吞吐率具有参考价值.
作者贡献声明:郝泽钰提出研究方案并完成了论文的撰写;代天傲、黄亦成、段岑林协助完成了ASIC平台上的验证实验;董进、吴世勇、张博、王雪岩、贾小涛提出指导意见并修改论文;杨建磊提出指导意见并讨论定稿.
-
表 1 原子性违反的访问交错模式
Table 1 Access Interleaving Pattern of Atomicity Violation
序号 模式 描述 1 {ep:R(x)er:W(x)ec:R(x)} 2个连续的读访问被中断的写访问打断. 2个对同一内存的连续读访问预期读到相同的值, 而交错的写访问打破了该预期. 2 {ep:R(x)er:W(x)ec:W(x)} 连接在读访问之后的本地写访问被中断的写访问打断. 写操作依赖于本地读操作读到的值(例如, 本地写访问依赖于本地读访问相关的分支条件), 而交错的写访问修改了该值. 3 {ep:W(x)er:R(x)ec:W(x)} 2个连续的写访问被中断的读访问打断. 本应不对外可见的中间结果被交错的读访问获取并使用. 4 {ep:W(x)er:W(x)ec:R(x)} 连接在写访问之后的本地读访问被中断的写访问打断. 读访问预期读到本地的赋值, 而交错的写访问修改了该值. 表 2 共享数据访问方式与访问粒度
Table 2 Access Modes and Access Granularities on Shared Data
访问方式 整体 元素 成员 位 合计 全局变量名 44 9(4*) 7 12 72(4*) 指针 6(2*) 0 0 1 7(2*) MMIO 1 1(1*) 0 1 3(1*) 合计 51(2*) 10(5*) 7 14 82(7*) 注:(*)表示共享数据访问的偏移量不是常量, 例如BRCST_buf[i]. 表 3 不同数据类型表现形式
Table 3 Representation of Different Data Types
数据类型 数据名称 Base Offset Size Mode ConstAccess 标量类型 func_run func_run {0} 1 read true 聚合类型 upload_data[i] upload_data {0,4} 4 write false MMIO *((unsigned int*) addr) ADDR_ZERO {0xff00} 4 read true 表 4 被分析的真实航天软件项目
Table 4 Analyzed Real-world Aerospace Software Projects
序号 项目 描述 代码行数 1 module1 某电源供应器控制软件 2275 2 module2 某推进控制软件 970 3 module3 某热控软件 1701 4 module4 某遥测和指挥软件 2380 5 module5 某姿态控制软件 5099 6 module6 某电源控制软件 3767 7 module7 某CPU软件 1544 8 module8 某推进线路盒软件 4015 表 5 基准测试集检测结果
Table 5 Results of Benchmark
序号 代码
行数中断
个数共享数
据个数原子性违
反个数Rchecker intAtom-S #WN #TP #FP 时间/s #WN #TP #FP 时间/s 1 65 2 3 1 2 1 1 0.3 2 1 1 0.203 2 46 2 2 1 2 1 1 0.47 2 1 1 0.093 3 74 2 4 1 2 1 1 0.51 1 1 0 0.484 4 69 2 9 1 3 1 2 0.31 1 1 0 0.375 5 47 1 2 1 3 1 2 5.2 1 1 0 0.125 6 54 1 3 1 2 1 1 0.31 1 1 0 0.266 7 51 1 2 1 11 1 10 0.37 1 1 0 0.328 8 53 1 2 1 2 1 1 0.32 2 1 1 0.375 9 48 1 3 3 2 2 0 0.34 3 3 0 0.156 10 54 1 2 1 1 1 0 0.32 2 1 1 0.125 11 44 1 4 1 1 1 0 0.28 1 1 0 0.078 12 35 1 2 1 1 1 0 0.31 1 1 0 0.031 13 67 3 4 1 2 1 1 0.45 2 1 1 0.203 14 60 3 4 1 2 1 1 0.36 2 1 1 0.156 15 41 1 2 1 1 1 0 0.31 1 1 0 0.094 16 34 1 1 3 3 3 0 0.36 3 3 0 0.063 17 42 1 2 5 5 5 0 1.81 5 5 0 0.109 18 65 2 2 3 3 3 0 0.36 3 3 0 0.109 19 66 1 8 1 2 1 1 0.37 1 1 0 0.531 20 55 2 3 1 3 1 2 0.32 1 1 0 0.172 21 81 1 6 3 3 3 0 0.35 3 3 0 0.578 22 67 1 4 4 6 4 2 0.34 4 4 0 0.219 23 40 1 1 2 2 2 0 0.3 2 2 0 0.063 24 65 1 3 1 1 1 0 0.141 25 39 1 2 1 1 1 0 0.31 1 1 0 0.078 26 44 2 1 2 1 1 0 0.29 2 2 0 0.062 27 49 3 1 5 2 2 0 0.32 5 5 0 0.078 28 54 3 2 1 1 1 0 0.41 1 1 0 0.109 29 95 1 3 1 1 1 0 1.4 1 1 0 0.359 30 57 3 2 1 2 1 1 0.35 1 1 0 0.109 31 92 1 7 3 3 3 0 0.31 3 3 0 0.21 合计 1753 48 96 54 75 48 27 17.76 60 54 6 6.082 准确率 88.9% 100% 误报率 36% 10% 平均时间/s 0.592 0.196 注:#WN表示报告的缺陷数量;#TP表示正报数;#FP表示误报数. 表 6 真实中断驱动型航天嵌入式软件检测结果
Table 6 Detection Results of Real-World Interrupt-Driven Aerospace Embedded Software
项目 代码
行数中断
个数共享数据分析 模式匹配 路径裁剪第1阶段 路径裁剪第2阶段 #FP 总时间/s 时间
占比/%数据
个数时间
占比/%违反
个数时间
占比/%违反
个数减少
比例/%时间
占比/%违反
个数减少
比例/%module1 2275 3 8.7 72 23.5 289 22.3 123 57.4 45.4 10 96.5 1 114.7 module2 970 3 1.8 52 4.9 376 1.9 194 48.4 91.4 6 98.4 1 136.7 module3 1710 2 21.3 81 37.7 201 27.7 125 37.8 13.3 6 97.0 0 30.0 module4 2380 2 33.5 222 56.4 334 4.9 179 41.5 5.2 2 99.4 0 185.7 module5 5099 5 5.9 16 87.8 15 12.5 6 60.0 0.2 2 86.7 0 58.9 module6 3767 2 32.9 94 36.6 183 21.7 101 44.8 8.7 8 95.6 2 169.9 module7 1544 2 23.0 26 54.4 88 12.7 62 29.5 9.9 1 98.4 0 28.1 module8 4015 2 5.5 83 36.1 418 7.9 311 25.6 50.5 10 97.6 0 304.7 总计 1904 1101 42.2 45 97.6 4 平均值 15.9 37.8 11.1 35.2 注:#FP表示误报数. 表 7 intAtom-S与intAtom有效性及效率对比
Table 7 Comparison of Effectiveness and Efficiency Between intAtom-S and intAtom
项目 intAtom intAtom-S 时间/s #FP 时间/s 额外开销 #FP module1 104.7 2 114.7 9.6% 1 module2 134.3 1 136.7 1.8% 1 module3 23.6 3 30.0 27.1% 0 module4 123.5 1 185.7 50.4% 0 module5 55.4 0 58.9 6.3% 0 module6 113.9 3 169.9 49.2% 2 module7 21.6 0 28.1 30.0% 0 module8 287.9 1 304.7 5.8% 0 合计 11 4 注:#FP表示误报数. 表 8 共享数据分析结果
Table 8 Results of Shared Data Analysis
项目 static-TSA intAtom-S 共享数据个数 #FP 共享数据个数 #FP module1 43 0 72 0 module2 54 2 52 0 module3 117 36 81 0 module4 232 10 222 0 module5 16 0 16 0 module6 118 24 94 0 module7 26 0 26 0 module8 202 119 83 0 合计 808 191 646 0 注:#FP表示误报数. 表 9 Naive+RPPS和 intAtom-S 与Naive的时间开销对比
Table 9 Time Cost of Naive+RPPS and intAtom-S Compared with That of Naive
项目 Naive Naive+RPPS intAtom-S 时间/s 时间/s 效率比 时间/s 效率比 module1 193.8 54.3 3.6× 52.1 3.7× module2 331.1 232.0 1.4× 125.0 2.6× module3 10.9 5.6 1.9× 4.0 2.7× module4 81.9 68.4 1.2× 9.6 8.5× module5 0.3 0.1 3.0× 0.1 3.0× module6 56.6 16.3 3.5× 14.8 3.8× module7 9.0 3.9 2.3× 2.8 3.2× module8 397.6 220.9 1.8× 153.8 2.6× 合计 1081.2 601.5 1.8× 362.2 3.0× 注:以Naive为基线,Naive+RPPS或intAtom-S的效率比表示Naive的时间分别和它们的时间的比值. -
[1] Sung C, Kusano M, Wang C. Modular verification of interrupt-driven software[C]//Proc of the 32nd IEEE/ACM Int Conf on Automated Software Engineering (ASE). Piscataway, NJ: IEEE, 2017: 206−216
[2] Regehr J. Random testing of interrupt-driven software[C] //Proc of the 5th ACM Int Conf on Embedded Software. New York: ACM , 2005: 290−298.
[3] 中国空间技术研究院软件产品保证中心. 中国空间技术研究院软件质量问题分析报告[R]. 2015 China Academy of Space Technology Software Product Assurance Center. Analysis Report on Software Quality Problems of China Academy of Space Technology[R]. 2015(in Chinese)
[4] 陈睿, 杨孟飞, 郭向英. 基于变量访问序模式的中断数据竞争检测方法[J]. 软件学报, 2016, 27(3): 547−561 Chen Rui, Yang Mengfei, Guo Xiangying. Interrupt data race detection based on shared variable access order pattern[J]. Journal of Software, 2016, 27(3): 547−561 (in Chinese)
[5] Flanagan C, Freund S N, Yi J. Velodrome: A sound and complete dynamic atomicity checker for multithreaded programs[C] //Proc of the ACM SIGPLAN Conf on Programming Language Design and Implementation. New York: ACM, 2008: 293–303
[6] Park S, Harrold M J, Vuduc R. Griffin: Grouping suspicious memory-access patterns to improve understanding of concurrency bugs[C]//Proc of the Int Symp on Software Testing and Analysis. New York: ACM, 2013: 134–144
[7] Park S, Vuduc R, Harrold M J. unicorn: A unified approach for localizing non-deadlock concurrency bugs[C] //Proc of the Software Testing, Verification and Reliability. Hoboken: Wiley, 2015: 167–190
[8] Razavi N, Farzan A, McIlraith S A. Generating effective tests for concurrent programs via AI automated planning techniques[J]. International Journal on Software Tools for Technology Transfer, 2014, 16(1): 49−65
[9] Sorrentino F, Farzan A, Madhusudan P. PENELOPE: Weaving threads to expose atomicity violations[C] //Proc of the 18th ACM SIGSOFT Int Symp on Foundations of Software Engineering. New York: ACM, 2010: 37–46
[10] Wang Chao, Limaye R, Ganai M, et al. Trace-based symbolic analysis for atomicity violations[C] //Proc of the Int Conf on Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer, 2010: 328–342
[11] Park S. Fault comprehension for concurrent programs[C] //Proc of the 35th Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2013: 1444–1446
[12] Park S, Vuduc R W, Harrold M J. Falcon: Fault localization in concurrent programs[C] //Proc of the 32nd ACM/IEEE Int Conf on Software Engineering. Piscataway, NJ: IEEE, 2010: 245–254
[13] Sadowski C, Freund S N, Flanagan C. SingleTrack: A dynamic determinism checker for multithreaded programs[C] //Proc of the European Symp on Programming. Berlin: Springer. 2009: 394–409
[14] Wang Liqiang, Stoller S D. Accurate and efficient runtime detection of atomicity errors in concurrent programs[C] //Proc of the 11th ACM SIGPLAN Symp on Principles and Practice of Parallel Programming. New York: ACM, 2006: 137–146
[15] Feng Haining, Yin Liangze, Lin Wenfeng, et al. Rchecker: A cbmc-based data race detector for interrupt-driven programs[C] //Proc of the IEEE 20th Int Conf on Software Quality, Reliability and Security Companion (QRS-C). Piscataway, NJ: IEEE, 2020: 465–471
[16] Racebench website. 2019.https://github.com/chenruibuaa/racebench.
[17] Li Chao, Chen Rui, Wang Boxiang, et al. Precise and efficient atomicity violation detection for interrupt-driven programs via staged path pruning[C] //Proc of the 31st ACM SIGSOFT Int Symp on Software Testing and Analysis, New York: ACM, 2022: 506–518.
[18] Wang Boxiang, Chen Rui, Li Chao, et al. SpecChecker-ISA: A data sharing analyzer for interrupt-driven embedded software[C] //Proc of the 31st ACM SIGSOFT Int Symp on Software Testing and Analysis. New York: ACM, 2022: 801−804
[19] Wang Yu, Wang Linzhang, Yu Tingting, et al. Automatic detection and validation of race conditions in interrupt-driven embedded software[C] //Proc of the 26th ACM SIGSOFT Int Symp on Software Testing and Analysis. New York: ACM, 2017: 113–124
[20] Lu Shan, Tucek J, Qin Feng, et al. AVIO: Detecting atomicity violations via access interleaving invariants[C] //Proc of the Int Conf on Architectural Support for Programming Languages & Operating Systems. New York: ACM, 2006: 37–48
[21] Codish M, Mulkers A, Bruynooghe M, et al. Improving abstract interpretations by combining domains[J]. ACM Transactions on Programming Languages and Systems, 1995, 17(1): 28−44
[22] Vaziri M, Tip F, Dolby J. Associating synchronization constraints with data in an object-oriented language[J]. ACM Sigplan Notices, 2006, 41(1): 334−345
[23] DG website. 2021.https://github.com/mchalupa/dg
[24] Shi Qingkai, Xiao Xiao, Wu Rongxin, et al. Pinpoint: Fast and precise sparse value flow analysis for million lines of code[C] //Proc of the 39th ACM SIGPLAN Conf on Programming Language Design and Implementation. New York: ACM, 2018: 693–706
[25] Snelting G, Robschink T, Krinke J. Efficient path conditions in dependence graphs for software safety analysis[C] //Proc of the ACM Transactions on Software Engineering and Methodology (TOSEM). New York: ACM, 2006: 410–457
[26] Huang J. Scalable thread sharing analysis[C] //Proc of the 38th Int Conf on Software Engineering. Piscataway, NJ: IEEE, 2016: 1097–1108
[27] Lu Shan, Park S, Zhou Yuanyuan. Finding atomicity-violation bugs through unserializable interleaving testing[C] //Proc of the IEEE Transactions on Software Engineering. Piscataway, NJ: IEEE, 2011: 844–860
[28] Lucia B, Devietti J, Strauss K, et al. Atom-aid: Detecting and surviving atomicity violations[C] //Proc of the 2008 Int Symp on Computer Architecture. Piscataway, NJ: IEEE, 2008: 277–288
[29] Chew L, Lie D. Kivati: Fast detection and prevention of atomicity violations[C] //Proc of the 5th European Conf on Computer Systems. New York: ACM, 2010: 307–320
[30] Chopra N, Pai R, D’Souza D. Data races and static analysis for interrupt-driven kernels[C] //Proc of the European Symp on Programming. New York: Springer, 2019: 697–723
[31] Yu Tingting, Srisa-an W, Rothermel G. 2012. SimTester: A controllable and observable testing framework for embedded systems[C] //Proc of the 8th ACM SIGPLAN/SIGOPS Conf on Virtual Execution Environments. New York: ACM, 2012: 51–62
[32] Wu Xueguang, Wen Yanjun, Chen Liqian, et al. Data race detection for interrupt-driven programs via bounded model checking[C] //Proc of the IEEE Seventh Int Conf on Software Security and Reliability Companion. Piscataway, NJ: IEEE, 2013: 204–210
[33] Wu Xueguang, Chen Liqian, Miné A, et al. Static analysis of run-time errors in interrupt-driven programs via sequentialization[J]. ACM Transactions on Embedded Computing Systems, 2016, 15(4): 1−26
-
期刊类型引用(1)
1. 石明丰,甘永根,赵玉珂,刘飞飞,何晓蓉. 智能量测开关与智能物联锁具信息交互设计. 中国新技术新产品. 2024(21): 137-139 . 百度学术
其他类型引用(1)