MISRA C — Codifica sicura per sistemi embedded
MISRA C è un insieme di linee guida di codifica sviluppate dalla Motor Industry Software Reliability Association (MISRA) per garantire la sicurezza (safety), la sicurezza informatica (security) e l’affidabilità del codice C nei sistemi embedded. Originariamente creato per il settore automobilistico, MISRA C è oggi lo standard di fatto nell’aerospazio, nei dispositivi medici, nel controllo industriale, nel settore ferroviario e in qualsiasi ambito in cui un guasto del software abbia conseguenze sulla sicurezza.
MISRA C:2023 — Edizione attuale
L’edizione 2023 consolida tutte le versioni precedenti (MISRA C:2012 + Emendamenti 1—4 + Corrigenda tecnici) in un’unica norma completa. Gli aggiornamenti principali includono:
| Aggiornamento | Descrizione |
|---|---|
| Supporto C11/C18 | Linee guida per _Atomic, _Static_assert, struct/union anonime |
| Regole sulla concorrenza | Nuove linee guida per il multithreading e le operazioni atomiche — fondamentali per l’embedded basato su RTOS |
| Focus sulla sicurezza | Maggiore allineamento con i requisiti CWE, CERT C e CRA |
| Documento unificato | Tutti gli emendamenti e i corrigenda fusi in un’unica specifica |
Classificazione delle linee guida
| Categoria | Significato | Deviazione consentita? |
|---|---|---|
| Mandatory | Da rispettare — nessuna eccezione | ? Mai |
| Required | Da rispettare salvo deviazione formale | ? Con motivazione documentata |
| Advisory | Buona pratica raccomandata | ? Nessuna deviazione formale necessaria |
Le linee guida sono ulteriormente classificate come Rules (definite con precisione, verificabili da tool) o Directives (più ampie, richiedono valutazione ingegneristica).
Cosa previene MISRA C
Insidie comuni del linguaggio C contro cui MISRA C offre protezione:
- Comportamento indefinito (undefined behavior) — Overflow di interi con segno, variabili non inizializzate, dereferenziazione di puntatori null
- Comportamento definito dall’implementazione — Ordinamento dei bit-field, segno del char, padding delle struct
- Costrutti pericolosi —
goto,setjmp/longjmp, union per il type-punning, funzioni ricorsive - Vulnerabilità di sicurezza — Buffer overflow, attacchi di tipo format string, troncamento di interi
- Bug di concorrenza — Race condition sui dati, operazioni non atomiche su variabili condivise
Conformità nella pratica
| Aspetto | Approccio |
|---|---|
| Strumenti di analisi statica | PC-lint, Polyspace, Coverity, Parasoft, LDRA, QA-C |
| Integrazione CI/CD | Verifica MISRA automatizzata a ogni commit |
| Processo di deviazione | Registro formale delle deviazioni con analisi dell’impatto sulla sicurezza |
| Matrice di conformità | Mappatura delle regole MISRA sulle regole di progetto con tracciamento delle violazioni |
MISRA C + norme di sicurezza funzionale
La conformità a MISRA C è richiamata o implicita nelle principali norme di sicurezza:
| Norma | Ambito | Requisito MISRA |
|---|---|---|
| ISO 26262 | Automotive | Raccomanda MISRA C per ASIL A—D |
| IEC 61508 | Industriale | Raccomanda un sottoinsieme C limitato |
| DO-178C | Aerospazio | Standard di codifica richiesti (MISRA comunemente usato) |
| IEC 62304 | Medicale | Richiede standard di codifica documentati |
| EN 50128 | Ferroviario | Raccomanda un sottoinsieme di linguaggio limitato |
Termini correlati
- CRA — Il Cyber Resilience Act dell’UE richiede pratiche di sviluppo sicuro; MISRA C fornisce il quadro di implementazione.
- RTOS — Le nuove linee guida sulla concorrenza di MISRA C:2023 sono essenziali per il firmware multi-thread basato su RTOS.
Tutti i nostri progetti embedded seguono le linee guida MISRA C con analisi statica automatizzata in CI/CD. Consultate i nostri servizi di Sviluppo di sistemi embedded.
Riferimenti ufficiali
- MISRA C — Guidelines for the Use of the C Language in Critical Systems — MISRA Consortium