bk99.de entertain the web since 1997

Sicherere C-Arrays im Linux-Kernel

Zusammenfassung

Kees Cook beschreibt die Umstellung falscher flexibler C-Arrays auf eindeutige Strukturen mit überprüfbaren Grenzen. Echte flexible Array-Member verwenden leere Klammern am Strukturende.

Ideen

  • Historische Null- und Ein-Element-Arrays simulieren dynamische Strukturenden mehrdeutig.
  • Echte C99-Flexible-Arrays drücken die Entwicklerabsicht eindeutig aus.
  • -fstrict-flex-arrays trennt dynamische und tatsächlich feste Endfelder.
  • Compilerwarnungen erkennen dadurch Zugriffe außerhalb fester Arrays.
  • Counted-by-Annotationen verbinden dynamische Arrays künftig mit ihrer Elementanzahl.

Einsichten

  • Sicherheitswerkzeuge brauchen eindeutigen Quellcode, bevor sie Grenzen zuverlässig prüfen können.
  • Legacy-Konventionen blockieren Compilerhärtung weit über ihren ursprünglichen Zweck hinaus.
  • Typpräzision verwandelt Laufzeitangriffe teilweise in Buildfehler.

Fakten

  • GCC und Clang unterstützen -fstrict-flex-arrays.
  • DECLARE_FLEX_ARRAY() kapselt flexible Arrays innerhalb von Unions.

Empfehlungen

  • Ersetze Null- und Ein-Element-Platzhalter schrittweise durch echte Flexible Arrays.
  • Aktiviere strikte Arraydiagnosen erst zusammen mit vollständiger Bereinigung der Altformen.

Referenzen

Originalartikel lesen →

Im Webarchiv suchen