Découvrez comment intégrer facilement l'analyse statique, les tests unitaires et d'autres méthodes de test de logiciels C et C++ dans votre pipeline CI/CD. Inscrivez-vous pour la démo >>

L'amendement 2012 prévu de la MISRA C:2 est maintenant disponible

Par Ricardo Camacho

12 mars 2020

4  min lire

L'amendement à MISRA C: 2012 a été publié par le groupe de travail MISRA C à l'appui de la norme C connue sous le nom de «C11» et a été officiellement ratifiée comme ISO / CEI 9899: 2011. C11 est de plus en plus utilisé et pour les projets et les organisations qui ont retardé la migration vers C11, c'est une annonce bien accueillie. C11 remplace également C99 (norme ISO / CEI 9899: 1999) et a été remplacé par C18 (norme ISO / CEI 9899: 2018). En plus des directives mises à jour en langage C, le groupe de travail MISRA C a publié les directives MISRA Compliance 2020, qui sont désormais obligatoires pour déclarer la conformité à la norme.

L'amendement 2012 de MISRA C: 2 fait désormais référence à l'ISO / CEI 9899: 2011 et contient des mises à jour en langage C, fournissant des lignes directrices sur les fonctionnalités qui peuvent être utilisées mais soumises à des restrictions et des fonctionnalités interdites à moins qu'elles ne s'accompagnent d'un écart approuvé par vos équipes. processus d'examen des logiciels. Au cours de l'élaboration de l'amendement 2, l'occasion de corriger tout problème connu lié aux ajouts précédents a également été saisie. Interminable la mission du groupe de travail MISRA de fournir des conseils pour éviter les comportements imprévisibles, réduire ou supprimer les défauts de codage et faciliter la sûreté, la sécurité, la portabilité et la fiabilité du code dans le contexte des systèmes logiciels embarqués.

Nouvelles règles MISRA C: 2012

Un exemple d'une nouvelle règle MISRA ajoutée qui s'applique aux nouvelles fonctionnalités de C11 est la règle 1.4, «Les fonctionnalités de langue émergente ne doivent pas être utilisées.» Un exemple de ceci serait si les installations et le spécificateur de classe de stockage _Thread_local est utilisé; cette règle marquera la structure du langage C11 avec un type de catégorie de violation «Obligatoire». C11 normalise la sémantique des programmes multithreads, potentiellement exécutés sur des plates-formes multicœurs, et une communication inter-thread légère à l'aide de variables atomiques. La mémoire globale locale à un thread est utilisée, dans laquelle des instances de comportement non défini et non spécifié ont été identifiées, y compris un comportement défini qui ne répond pas aux attentes. Aller de l'avant et être conforme à MISRA C: 2012 Amendement 2, si j'utilise _Thread_local non seulement un écart est nécessaire, mais des mesures d'assurance doivent être mises en place afin de remédier aux comportements qui compromettent la sûreté et / ou la sécurité.

Les _Générique Le mot-clé est une autre nouvelle fonctionnalité du langage C11 qui ne doit pas être utilisée et qui peut présenter un comportement indésirable et certains ont trouvé que la norme C11 est vague dans certains scénarios. Le _Générique est un type de surcharge de macro. Il est utilisé pour aider le programmeur à utiliser n'importe quelle macro comme générique, dans le but de la rendre plus efficace. La ligne de code suivante montre comment le _Générique Le mot clé est utilisé pour déclarer n'importe quelle macro pour les différents types de types de données et comme générique pour différentes méthodes. Prenez l'exemple de macro VOL suivant ci-dessous; VOL (x) se traduit par VOLc (x), VOLl (x), VOL (x) ou VOLf (x) selon le type de x.

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

Codage sécurisé

Une cause courante de vulnérabilités de sécurité est l'utilisation de la fonction de bibliothèque standard système iSun défini dans . MISRA C: 2012 L'amendement 2 a ajouté une nouvelle règle 21.21 qui spécifie que la fonction de bibliothèque standard système iSun ne doit pas être utilisé. Le système iSun call est une fonction de blocage, utilisée pour exécuter des sous-processus et des commandes, attendant que le processus enfant se termine et renvoie sa valeur de sortie. Reconnaissez que le prototype «int system (const char * command);» n'a pas besoin d'être une seule commande, mais peut être un pipeline ou une série de pipelines. (par exemple system (“pngtopnm \” My Picture.png \ ”| pnmtoxwd> fout.xwd && xwud fout.xwd”);) Depuis la variable commander est construit à partir de données fournies par l'utilisateur, un attaquant peut être capable de sortir de la citation et d'exécuter n'importe quelle commande arbitraire dans le contexte du parent. Une mesure suggérée pourrait être d'utiliser des chaînes de commande prédéterminées ou de contourner l'appel système tous ensemble et d'utiliser spawn à la place.

Rapport de conformité

Pour une allégation de conformité MISRA, il existe des lignes directrices écrites qui ont été affinées et révisées au cours des dernières années. Le dernier de ce document est le MISRA Compliance 2020, qui vient de sortir en février. D'un point de vue de haut niveau, ayant mis en place un rapport sur l'utilisation d'un processus de développement logiciel bien ordonné, une liste des directives exactement appliquées et de l'efficacité des méthodes d'application, y compris le degré ou le niveau des écarts, plus avoir pris en compte le statut de tous les composants logiciels développés en dehors du projet est nécessaire pour revendiquer la conformité MISRA. Parasoft DTP fournit une extension de reporting dédiée qui est entièrement conforme aux exigences de la norme de conformité MISRA. Le DTP vous guidera tout au long du processus d'élaboration du plan d'application des lignes directrices (GEP) et du plan de recatégorisation des lignes directrices (GRP) et générera automatiquement un résumé de conformité aux lignes directrices (GCS) avec une liste complète des écarts approuvés. Le reporting automatisé élimine une énorme quantité de travail manuel fastidieux et permet aux organisations de suivre le processus de conformité qui est désormais obligatoire pour les directives de codage MISRA.

Conclusion

Il existe d'autres nouvelles règles MISRA C: 2012 Amendement 2 qui se démarquent comme le _Non-retour spécificateur de fonction, le _Atomique spécificateur de type, le _Alignes spécificateur d'alignement et le _Alignof opérateur. L'utilisation de ces spécificateurs de type déclenchera une violation de catégorie Requis et ne doit pas être utilisé, répondant aux préoccupations concernant la couverture de C11 et les vulnérabilités de sécurité.

Il y a aussi les nombreuses mises à jour de l'amendement 2 et les remplacements de texte effectués, qui clarifient et améliorent la norme. Il est également très important de noter à nouveau qu'en plus de la norme, les utilisateurs doivent suivre la version de conformité désormais obligatoire et complémentaire des directives MISRA Compliance 2020. Félicitations au groupe de travail MISRA pour avoir continué à faire un travail remarquable et à apporter une immense contribution à la communauté du logiciel.

Apprendre encore plus sur la conformité MISRA avec Parasoft

« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.

Par Ricardo Camacho

Responsable marketing produit technique pour les solutions de test embarquées de Parasoft. Il possède une expertise dans le SDLC et l'automatisation des tests d'applications embarquées en temps réel, critiques pour la sûreté et la sécurité, et la conformité des logiciels aux normes de l'industrie.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.