备受期待的MISRA C:2012(修订版2)现已发布
MISRA C工作组发布了对MISRA C:2012的修订版,以支持称为“C11”的C标准,并正式批准为ISO/IEC 9899:2011。C11已得到广泛使用,对于一直推迟迁移到C11的项目和组织,这是一个广受欢迎的公告。C11还取代了C99(标准ISO/IEC 9899:1999),并已被C18(标准ISO/IEC 9899:2018)取代。除了更新的C语言准则之外,MISRA C工作组还发布了MISRA 2020合规性指南,现在必须声明该声明符合该标准。
MISRA C:2012(修订版2)现在引用ISO/IEC 9899:2011,并包含C语言更新,为可能使用但受限制的功能和受禁止的功能提供指导,除非其存在您的团队软件审查过程已批准的偏差。在制定修订版2的过程中,还获得了利用先前的补充内容纠正任何已知问题的机会。MISRA工作组的任务不止是提供指导,以防止发生不可预测的行为,减少或消除编码缺陷并在嵌入式软件系统的环境中促进代码安全、安全性、可移植性和可靠性。
新的MISRA C:2012规则
添加了适用于C11中新功能的新MISRA规则的一个示例,即规则1.4,“不得使用紧急语言功能。” 如果使用设施<threads.h>和_Thread_local存储类说明符,则可能是这种情况的一个实例。该规则将使用违反类别类型“必需”标记C11语言结构。C11标准化了可能在多核平台上运行的多线程程序的语义,以及使用原子变量的轻量级线程间通信。使用线程本地的全局内存,其中已标识出未定义和未指定行为的实例,包括未满足预期的已定义行为。 向前迈进并符合MISRA C:2012(修订版2),如果我使用_Thread_local,不仅需要进行偏离,而且还需要采取保证措施来解决危害安全性的行为。
_Generic关键字是另一个不应使用的C11语言新功能,它可能表现出不良行为,并且一些人发现C11标准在某些情况下含糊不清。_Generic运算符是一种宏重载。它用于帮助程序员将任何宏都用作通用宏,以使其更高效。下面的代码行显示_Generic关键字如何用于声明不同类型的数据类型的任何宏,以及如何将其声明为不同方法的泛型。以下面的VOL宏示例为例;VOL(x)根据x的类型转换为VOLc(x),VOLl(x),VOL(x)或VOLf(x)。
#define VOL(x) _Generic((x), char: VOLc, long double: VOLl, default: VOL, float: VOLf)(x)
安全编码
安全漏洞的一个常见原因是使用了<stdlib.h>中定义的标准库函数系统。MISRA C:2012(修订版2)添加了新的规则21.21,该规则规定不得使用标准库函数系统。系统调用是一个阻塞函数,用于执行子进程和命令,等待子进程终止并返回其退出值。认识到原型为“int系统(const char *command);”不需要是单个命令,而可以是一个管道或一系列管道。(例如,系统("pngtopnm \"My Picture.png\" | pnmtoxwd > fout.xwd && xwud fout.xwd");)由于可变命令是由用户提供的数据构成的,因此攻击者可能会发现 引用并在父级上下文中执行任意命令。一些建议的措施可能是利用预定的命令字符串或一起绕开系统调用,而使用spawn代替。
合规报告
对于声称符合MISRA的要求,有一些书面指南,这些指南在过去的几年中不断完善和修订。本文档的最新版本是MISRA Compliance 2020,它于2月发布。从较高的角度来看,适当报告了使用良好的软件开发过程的使用情况,准确地应用了哪些指南以及执行方法的有效性的列表,包括偏差的程度或程度,以及为了声称MISRA符合要求,必须考虑到项目外开发的所有软件组件的状态。Parasoft DTP提供了专用的报告扩展,完全符合MISRA Compliance标准的要求。DTP将指导您完成构建准则执行计划(GEP)和准则重新分类计划(GRP)的过程,并自动生成准则合规摘要(GCS)以及已批准偏差的完整列表。自动化报告消除了繁琐的手工工作,使组织能够遵循MISRA编码准则现在强制执行的合规性流程。
结论
还有其他新的MISRA C:2012(修订版2)规则,例如_Noreturn函数说明符、_Atomic类型说明符、_Alignas对齐说明符和_Alignof运算符,非常引人注目。 使用这些类型说明符将触发类别“必需的违规”,并且将不被使用,从而解决了C11覆盖和安全漏洞的问题。此外,还进行了许多修订版2更新和文本替换,以澄清和改进标准。同样,再次提醒您非常重要的一点是,与该标准一起,用户现在可以遵循MISRA Compliance 2020指南的强制性和补充性法规遵循版本。感谢MISRA工作组继续做出色的工作,并为软件界做出了巨大贡献。
要了解有关MISRA与Parasoft的合规性的更多信息,请!