ISO 26262 FFI

来源:公众号“Elektroauto”
2021-11-23
2795

图片

在解释免于干扰之前,我们先来看看软件安全架构和软件架构的两个支柱:静态(Static)架构和动态(Dynamic)架构。动态架构将有助于分析免于干扰的时间方面。之后,软件架构设计将会开发到具体的软件单元的层次。


软件架构设计应该描述:

a). 软件架构要素的静态设计方面;

    - 软件结构的分级层次;

    - 数据类型和它们的特征参数;

    - 软件组件的外部接口;

    - 嵌入式软件的外部接口;

    - 全局变量;

    - 限制条件(包含架构的范围和外部的依赖关系);

b). 软件架构要素的动态设计方面;

    - 功能性和行为;

    - 逻辑时序和数据处理

    - 控制流和并发进程;

    - 通过接口和全局变量的数据流;

    - 时间的限制;


免于干扰 (FFI - Freedom From Interface)

如果在要素A中有一个故障1,并且这个故障被传递到了要素B;我们就称之为级联失效(Cascading Failure -CF)。假如要素A是QM,并且没有按照ISO 26262标准开发,因此,可能会遇到很多系统性故障。假设要素B是ASIL-x,x可能是 A, B, C 或者 D。


要素A和要素B之间有三种方式的相互干扰:

(本篇我们只谈空间相互干扰(Spatial Interference))

1- 空间干扰 Spatial Interference;

2- 时间干扰 Temporal Interference;

3- 通讯干扰 Communication Interference;


 

图片


空间(spatial)意思是空间(space)或者存储器干扰。比如:故障1是传递到要素B的机油温度,并导致了故障2,因为它损坏了电机功能的转速。发生此问题是因为要素A输出值的根本原因可能未在“输入和输出数据的范围检查”。另外一个例子


图片


关于内存,对于在每个软件分区中执行的软件要素,可以考虑下面列出的故障的影响:

内容颠覆(corruption of content); 比如被重写 overwritten

- 不一致的数据(inconsistent data)(比如,由于在数据获取期间更新);数据的产生者和使用者之间没有同步;

堆栈上溢或者下溢(stack overflow or underflow);当访问堆栈末尾的内存时,将报告溢出,当访问堆栈开始之前的内存时,报告下溢;(上溢是当一个超长的数据进入到缓冲区时,超出部分被写入上级缓冲区,上级缓冲区存放的可能是数据、上一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。下溢是当一个超长的数据进入到缓冲区时,超出部分被写入下级缓冲区,下级缓冲区存放的是下一条指令的指针,或者是其他程序的输出内容。)


图片


在上面的例子中,我们不知道堆栈溢出的后果,这是无法预测的。


- 对分配给另一个软件要素的内存的读取或者写入访问(read or write access to memory allocated to another software element)


我们必须确保QM的部分不能对ASIL-x的部分有干扰,可以用如下的安全机制来实现:

1- 内存保护 Memory Protection;

2- 奇偶校验 Parity Bits;

3- 故障纠错码 Error-Correction-Code -ECC;

4- 循环冗余校验 Cyclic-Redundancy-Check -CRC;

5- 冗余存储 Redundant Storage;存储变量及其补码


图片


6- 限制内存访问;restricted access to memory


图片


7- 可以使用内存访问软件的静态分析和静态分配;

有专门的商业静态分析工具可以演示FFI。

收藏
点赞
2000