Fil-C macht setjmp/longjmp und ucontext speichersicher

Fil-C, der speichersichere C-Dialekt, unterstützt nun setjmp/longjmp und die ucontext-APIs (setcontext, getcontext, makecontext, swapcontext) ohne Stack-Korruption oder Capability-Verstöße. Die Funktion wurde in Version 0.680 eingeführt und ist beim Bau aus dem Quellcode verfügbar.
Das Problem mit Kontext-APIs
Diese APIs sind berüchtigt unsicher, da Missbrauch einen hängenden Stack wiederherstellen kann. Häufige Fehler sind:
- Aufruf von
setjmpodergetcontextin einer Funktion, dann Rückkehr – der gespeicherte Kontext zeigt auf einen nicht mehr existierenden Stack-Frame. - Beenden des Threads und dann versuchen, die Ausführung auf einem freigegebenen Stack wiederherzustellen.
- Erstellen eines Kontexts mit
makecontextauf einem Stack, Freigabe dieses Stacks, dannswapcontextodersetcontextdarauf. - Übergabe des aktuell ausgeführten Kontexts als zweites Argument an
swapcontext(Vertauschen mit sich selbst).
In Standard-C („Yolo-C“) verursachen diese Fehler stille Stack-Korruption, schwer zu debuggende Abstürze und potenzielle Sicherheitslücken. In Fil-C führen alle derartigen Fälle zu einem Panic am Ort des Missbrauchs.
Wie Fil-C Speichersicherheit implementiert
Fil-Cs Ansatz unterscheidet sich für setjmp/longjmp und ucontext. Bei setjmp/longjmp besteht die zentrale Herausforderung darin, dass setjmp zweimal zurückkehrt – einmal beim Aufruf, erneut nach longjmp. Das Sichern des Kontexts bedeutet, dass der Compiler volatile-annotierte Variablen korrekt behandeln muss, aber Fil-C stellt sicher, dass die Wiederherstellung eines Kontexts niemals auf freigegebenen oder ungültigen Speicher zugreift.
Für ucontext verwaltet Fil-C Stacks so, dass die Operation entweder legal ist oder zu einem Panic führt, da hängende Stack-Frames einfach unmöglich sind.
Beispiel: setjmp/longjmp in Fil-C
Das folgende Programm demonstriert das Verhalten:
#include <setjmp.h>
#include <stdio.h>
int main(int argc, char** argv) {
volatile int x = 42;
jmp_buf jb;
if (setjmp(jb)) {
printf("x = %d\n", x);
return 0;
}
x = 666;
longjmp(jb, 1);
printf("Should not get here.\n");
return 1;
}
Dies gibt x = 666 aus und beendet das Programm. Ohne volatile könnte der Compiler optimieren und 42 ausgeben. Fil-C ändert die Optimierungssemantik nicht, verhindert aber in jedem Fall Speicherkorruption.
Für wen?
Entwickler, die ucontext-basierte Coroutinen (z. B. Boost-Fasern) oder setjmp/longjmp zur Ausnahmebehandlung in C-Programmen verwenden und Speichersicherheit wünschen.
📖 Den vollständigen Quelltext lesen: HN AI Agents
👀 Siehe auch

Sicherheitscheckliste für Claude KI-generierte Anwendungen
Ein Entwickler teilt eine Checkliste mit häufigen Sicherheits- und Betriebslücken in Anwendungen, die mit Claude Code erstellt wurden, darunter Ratenbegrenzung, Authentifizierungsfehler, Datenbank-Skalierungsprobleme und Eingabevalidierungsschwachstellen.

Google TIG meldet ersten KI-generierten Zero-Day-Exploit im Live-Betrieb
Die Google Threat Intelligence Group hat einen Bedrohungsakteur identifiziert, der einen Zero-Day-Exploit einsetzt, der vermutlich mit KI entwickelt wurde. Dies ist die erste beobachtete offensive Nutzung von KI zur Ausnutzung von Zero-Day-Sicherheitslücken.

Sicherheitslücken in der von Lovable präsentierten EdTech-App aufgedeckt
Ein Sicherheitsforscher entdeckte 16 Schwachstellen in einer auf Lovable vorgestellten EdTech-App, darunter kritische Authentifizierungslogikfehler, die 18.697 Nutzerdatensätze ohne Authentifizierung offenlegten. Die App hatte über 100.000 Aufrufe auf Lovables Showcase und echte Nutzer von UC Berkeley, UC Davis und Schulen weltweit.

KnightClaw: Lokale Sicherheitserweiterung für OpenClaw-Agenten
KnightClaw ist eine Plug-and-Play-Erweiterung, die Nachrichten abfängt, bevor sie OpenClaw-Agenten erreichen, und ein 8-Schichten-Hybrid-Erkennungssystem sowie Ausgangsredaktion bietet. Es läuft vollständig lokal ohne jegliche Telemetrie und ist unter der MIT-Lizenz lizenziert.