MISRA C — bezpečné programovanie pre embedded systémy
MISRA C je súbor smerníc pre programovanie, ktorý vypracovalo združenie Motor Industry Software Reliability Association (MISRA) s cieľom zaistiť bezpečnosť (safety), zabezpečenie (security) a spoľahlivosť kódu v jazyku C v embedded systémoch. MISRA C pôvodne vznikol pre automobilový priemysel a dnes je de facto štandardom v leteckom a kozmickom priemysle, pri zdravotníckych pomôckach, v priemyselnom riadení, v železničnej doprave a v každej oblasti, kde má zlyhanie softvéru dôsledky pre bezpečnosť alebo zabezpečenie.
MISRA C:2023 a MISRA C:2025
Vydanie 2023 (MISRA C:2012, tretie vydanie, druhá revízia) konsoliduje MISRA C:2012 s dodatkami 1–4 a technickými korigendami 1–2 do jedného dokumentu. Aktuálnym vydaním je MISRA C:2025, inkrementálna aktualizácia vydaná v marci 2025. Medzi kľúčové aktualizácie vydania 2023 patria:
| Aktualizácia | Opis |
|---|---|
| Podpora C11/C18 | Smernice pre _Generic, _Noreturn, _Alignas, atomické typy a vlákna |
| Pravidlá pre súbežnosť | Nové smernice pre viacvláknové spracovanie a atomické operácie — kľúčové pre embedded systémy založené na RTOS |
| Dôraz na zabezpečenie (security) | Zverejnené mapovania pokrytia voči CERT C a ISO/IEC 17961 (mapovanie na CWE pribudlo s MISRA C:2025) |
| Jednotný dokument | Všetky dodatky a korigendá zlúčené do jednej špecifikácie |
Klasifikácia smerníc
| Kategória | Význam | Je povolená odchýlka? |
|---|---|---|
| Mandatory (povinná) | Musí sa dodržať — bez výnimiek | ❌ Nikdy |
| Required (vyžadovaná) | Musí sa dodržať, ak sa neuplatní formálna odchýlka | ✅ So zdokumentovaným zdôvodnením |
| Advisory (odporúčaná) | Odporúčaná osvedčená prax | ✅ Formálna odchýlka nie je potrebná |
Smernice sa ďalej klasifikujú ako pravidlá (Rules: presne definované, overiteľné nástrojmi) alebo direktívy (Directives: širšie, vyžadujú inžiniersky úsudok).
Čomu MISRA C predchádza
Bežné úskalia jazyka C, pred ktorými MISRA C chráni:
- Nedefinované správanie — Pretečenie celých čísel so znamienkom, neinicializované premenné, dereferencia nulového ukazovateľa
- Správanie definované implementáciou — Poradie bitových polí, znamienkovosť typu char, výplň štruktúr (padding)
- Nebezpečné konštrukcie —
goto,setjmp/longjmp, zjednotenia (union) použité na reinterpretáciu typov (type punning), rekurzívne funkcie - Bezpečnostné zraniteľnosti — Pretečenie vyrovnávacej pamäte, útoky cez formátovacie reťazce, orezanie celočíselných hodnôt
- Chyby súbežnosti — Dátové súbehy (data races), neatomické operácie nad zdieľanými premennými
Súlad v praxi
| Hľadisko | Prístup |
|---|---|
| Nástroje statickej analýzy | PC-lint, Polyspace, Coverity, Parasoft, LDRA, QA-C |
| Integrácia do CI/CD | Automatizovaná kontrola MISRA pri každom commite |
| Proces odchýlok | Formálny záznam o odchýlke s analýzou vplyvu na bezpečnosť |
| Matica súladu | Mapovanie pravidiel MISRA na projektové pravidlá so sledovaním porušení |
MISRA C + normy funkčnej bezpečnosti
Na súlad s MISRA C sa odvolávajú alebo ho implicitne predpokladajú hlavné bezpečnostné normy:
| Norma | Oblasť | Požiadavka na MISRA |
|---|---|---|
| ISO 26262 | Automobilový priemysel | Vyžaduje smernice pre programovanie; MISRA C uvádza ako príklad pre jazyk C |
| IEC 61508 | Priemysel | Odporúča obmedzenú podmnožinu jazyka C |
| DO-178C | Letecký a kozmický priemysel | Vyžadujú sa štandardy programovania (bežne sa používa MISRA) |
| IEC 62304 | Zdravotníctvo | Vyžaduje zdokumentované štandardy programovania |
| EN 50716 (nahrádza EN 50128) | Železnice | Odporúča obmedzenú podmnožinu jazyka |
Súvisiace pojmy
- CRA — Nariadenie EÚ Cyber Resilience Act vyžaduje, aby boli výrobky navrhnuté a vyvinuté tak, aby zaisťovali primeranú úroveň kybernetickej bezpečnosti, nemenuje však žiadny štandard programovania; MISRA C je jedným zo spôsobov, ako to pri kóde v jazyku C podporiť.
- RTOS — Nové smernice MISRA C:2023 pre súbežnosť sú nevyhnutné pre viacvláknový firmvér založený na RTOS.
Všetky naše embedded projekty dodržiavajú smernice MISRA C s automatizovanou statickou analýzou v CI/CD. Pozrite si naše služby vývoja embedded systémov.
Oficiálne referencie
- MISRA C — Guidelines for the Use of the C Language in Critical Systems — MISRA Consortium