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 e MISRA C:2025
L’edizione 2023 (MISRA C:2012, terza edizione, seconda revisione) consolida MISRA C:2012 con gli Emendamenti 1–4 e i Corrigenda tecnici 1–2 in un unico documento. MISRA C:2025, un aggiornamento incrementale pubblicato a marzo 2025, è l’edizione attuale. Gli aggiornamenti principali del 2023 includono:
| Aggiornamento | Descrizione |
|---|---|
| Supporto C11/C18 | Linee guida per _Generic, _Noreturn, _Alignas, tipi atomici e thread |
| Regole sulla concorrenza | Nuove linee guida per il multithreading e le operazioni atomiche — fondamentali per l’embedded basato su RTOS |
| Focus sulla sicurezza | Mappature di copertura pubblicate rispetto a CERT C e ISO/IEC 17961 (una mappatura CWE è stata aggiunta con MISRA C:2025) |
| 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 | Richiede linee guida di codifica; cita MISRA C come esempio per il C |
| 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 50716 (sostituisce la EN 50128) | Ferroviario | Raccomanda un sottoinsieme di linguaggio limitato |
Termini correlati
- CRA — Il Cyber Resilience Act dell’UE richiede che i prodotti siano progettati e sviluppati in modo da garantire un livello adeguato di cibersicurezza, ma non indica alcuno standard di codifica; MISRA C è uno dei modi per supportare tale obiettivo nel codice C.
- 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