Parasoft C/C++test 2022.2 unterstützt MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Die erwartete Änderung 2012 von MISRA C:2 ist jetzt verfügbar

Von Ricardo Camacho

12. März 2020

4  min lesen

Die Änderung von MISRA C: 2012 wurde von der MISRA C-Arbeitsgruppe zur Unterstützung des als „C11“ bekannten C-Standards veröffentlicht und offiziell als ISO / IEC 9899: 2011 ratifiziert. C11 ist weit verbreitet und für Projekte und Organisationen, die die Migration auf C11 verzögert haben, ist dies eine gut aufgenommene Ankündigung. C11 ersetzt auch C99 (Norm ISO / IEC 9899: 1999) und wurde durch C18 (Norm ISO / IEC 9899: 2018) ersetzt. Zusätzlich zu den aktualisierten C-Sprachrichtlinien hat die MISRA C-Arbeitsgruppe die MISRA Compliance 2020-Richtlinien veröffentlicht, die nun obligatorisch sind, um die Einhaltung des Standards zu fordern.

MISRA C: 2012 Änderung 2 bezieht sich jetzt auf ISO / IEC 9899: 2011 und enthält Aktualisierungen der C-Sprache, die Richtlinien für Funktionen enthalten, die verwendet werden können, jedoch Einschränkungen und Funktionen unterliegen, die verboten sind, es sei denn, es liegt eine Abweichung vor, die von Ihren Teams genehmigt wurde Software-Überprüfungsprozess. Während der Entwicklung von Änderungsantrag 2 wurde auch die Gelegenheit genutzt, bekannte Probleme mit den vorherigen Ergänzungen zu beheben. Unendliche Mission der MISRA-Arbeitsgruppe, Leitlinien zur Vermeidung unvorhersehbaren Verhaltens, zur Reduzierung oder Beseitigung von Codierungsfehlern und zur Erleichterung der Sicherheit, Portabilität und Zuverlässigkeit von Codes im Kontext eingebetteter Softwaresysteme bereitzustellen.

Neue MISRA C: 2012-Regeln

Ein Beispiel für eine neue hinzugefügte MISRA-Regel, die für neue Funktionen in C11 gilt, ist Regel 1.4: „Funktionen für neu auftretende Sprachen dürfen nicht verwendet werden.“ Ein Beispiel hierfür wäre, wenn die Einrichtungen und der _Thread_local-Speicherklassenspezifizierer wird verwendet; Diese Regel kennzeichnet die C11-Sprachstruktur mit einem Verstoßkategorietyp "Erforderlich". C11 standardisiert die Semantik von Multithread-Programmen, die möglicherweise auf Multi-Core-Plattformen ausgeführt werden, und die einfache Kommunikation zwischen Threads mithilfe atomarer Variablen. Es wird ein globaler Speicher verwendet, der für einen Thread lokal ist und in dem Fälle von undefiniertem und nicht angegebenem Verhalten identifiziert wurden, einschließlich definiertem Verhalten, das nicht den Erwartungen entspricht. Wenn ich MISRA C: 2012, Änderungsantrag 2, verwende und mich an MISRA C: XNUMX halte _Thread_local Es ist nicht nur eine Abweichung erforderlich, sondern es müssen auch Sicherheitsmaßnahmen getroffen werden, um die Verhaltensweisen anzugehen, die die Sicherheit gefährden.

Die _Generisch Das Schlüsselwort ist eine weitere neue C11-Sprachfunktion, die nicht verwendet werden darf und möglicherweise unerwünschtes Verhalten aufweist. Einige haben festgestellt, dass der C11-Standard in bestimmten Szenarien vage ist. Das _Generisch Operator ist eine Art von Makroüberladung. Es wird verwendet, um dem Programmierer zu helfen, ein Makro als generisch zu verwenden, um es effizienter zu machen. Die folgende Codezeile zeigt, wie die _Generisch Das Schlüsselwort wird verwendet, um ein Makro für die verschiedenen Datentypen zu deklarieren und als generisch für verschiedene Methoden. Nehmen Sie das folgende Beispiel für ein VOL-Makro. VOL (x) wird je nach Art von x in VOLc (x), VOLl (x), VOL (x) oder VOLf (x) übersetzt.

#define VOL (x) _Generic ((x), char: VOLc, long double: VOLl, Standard: VOL, float: VOLf) (x)

Sichere Codierung

Eine häufige Ursache für Sicherheitslücken ist die Verwendung der Standardbibliotheksfunktion System definiert in . MISRA C: 2012 Änderung 2 hat eine neue Regel 21.21 hinzugefügt, in der festgelegt ist, dass die Standardbibliothek funktioniert System darf nicht verwendet werden. Das System call ist eine Blockierungsfunktion, die zum Ausführen von Unterprozessen und Befehlen verwendet wird und darauf wartet, dass der untergeordnete Prozess beendet wird und seinen Exit-Wert zurückgibt. Erkennen Sie, dass der Prototyp "int system (Befehl const char *)"; muss kein einzelner Befehl sein, sondern kann eine Pipeline oder eine Reihe von Pipelines sein. (zB system ("pngtopnm \" My Picture.png \ "| pnmtoxwd> fout.xwd && xwud fout.xwd");) Seit der Variablen Befehl Wenn ein Angreifer aus vom Benutzer bereitgestellten Daten erstellt wird, kann er möglicherweise aus dem Angebot ausbrechen und einen beliebigen Befehl im Kontext des übergeordneten Elements ausführen. Einige vorgeschlagene Maßnahmen könnten darin bestehen, vorgegebene Befehlszeichenfolgen zu verwenden oder den Systemaufruf insgesamt zu umgehen und stattdessen Spawn zu verwenden.

Compliance-Berichterstattung

Für einen Anspruch auf MISRA-Konformität gibt es schriftliche Richtlinien, die in den letzten Jahren verfeinert und überarbeitet wurden. Das neueste Dokument ist die MISRA Compliance 2020, die erst im Februar veröffentlicht wurde. Aus einer hochrangigen Sicht mit einer Berichterstattung über die Verwendung eines geordneten Softwareentwicklungsprozesses, einer Liste, welche Richtlinien genau angewendet werden, und der Wirksamkeit der Durchsetzungsmethoden, einschließlich des Grades oder der Höhe der Abweichungen, plus Die Berücksichtigung des Status aller außerhalb des Projekts entwickelten Softwarekomponenten ist erforderlich, um die MISRA-Konformität geltend zu machen. Parasoft DTP bietet eine dedizierte Berichtserweiterung, die den Anforderungen des MISRA-Konformitätsstandards vollständig entspricht. DTP führt Sie durch den Prozess der Erstellung des Guidelines Enforcement Plan (GEP) und des Guidelines Recategorization Plan (GRP) und generiert automatisch eine Guidelines Compliance Summary (GCS) zusammen mit einer vollständigen Liste der genehmigten Abweichungen. Die automatisierte Berichterstellung eliminiert eine Menge mühsamer manueller Arbeit und ermöglicht Unternehmen den Compliance-Prozess, der jetzt für MISRA-Codierungsrichtlinien vorgeschrieben ist.

Fazit

Es gibt andere neue Regeln für MISRA C: 2012, Änderung 2, die wie die hervorstechen _Keine Rückkehr Funktionsspezifizierer, der _Atom Typspezifizierer, der _Ausrichten Ausrichtungsspezifizierer und der _Alignof Operator. Die Verwendung dieser Typbezeichner löst einen Verstoß der Kategorie Erforderlich aus und darf nicht verwendet werden, um Bedenken hinsichtlich der Abdeckung von C11 und Sicherheitslücken zu beseitigen.

Hinzu kommen die zahlreichen Änderungs-2-Updates und Textersetzungen, die den Standard klarstellen und verbessern. Es ist auch sehr wichtig, noch einmal darauf hinzuweisen, dass Benutzer zusammen mit dem Standard die jetzt obligatorische und kostenlose Konformitätsfreigabe der MISRA Compliance 2020-Richtlinien befolgen müssen. Ein großes Lob an die MISRA-Arbeitsgruppe, die weiterhin hervorragende Arbeit leistet und einen immensen Beitrag zur Software-Community leistet.

Mehr erfahren über MISRA-Konformität mit Parasoft

„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.

Von Ricardo Camacho

Sr. Technical Product Marketing Manager für die eingebetteten Testlösungen von Parasoft. Er verfügt über Erfahrung in der SDLC- und Testautomatisierung eingebetteter Echtzeit-, sicherheitskritischer Anwendungen sowie in der Softwarekonformität mit Industriestandards.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.