Fil-C rend la mémoire de setjmp/longjmp et ucontext sécurisée

Fil-C, le dialecte C à sécurité mémoire, prend désormais en charge setjmp/longjmp et les API ucontext (setcontext, getcontext, makecontext, swapcontext) sans corruption de pile ni violations de capacité. Cette fonctionnalité est disponible depuis la version 0.680 et lors de la compilation depuis les sources.
Le problème des API de contexte
Ces API sont notoirement dangereuses car une mauvaise utilisation peut restaurer une pile pendante. Les bogues courants incluent :
- Appeler
setjmpougetcontextdans une fonction, puis retourner — le contexte sauvegardé pointe vers une frame de pile qui n'existe plus. - Quitter le thread, puis essayer de restaurer l'exécution sur une pile libérée.
- Créer un contexte avec
makecontextsur une pile, libérer cette pile, puis y accéder avecswapcontextousetcontext. - Passer le contexte en cours d'exécution comme second argument à
swapcontext(basculer vers lui-même).
En C standard ("Yolo-C"), ces bogues provoquent une corruption silencieuse de la pile, des plantages difficiles à déboguer et des failles de sécurité potentielles. Dans Fil-C, tous ces cas produisent un panic au point de l'erreur.
Comment Fil-C assure la sécurité mémoire
L'approche de Fil-C diffère pour setjmp/longjmp par rapport à ucontext. Pour setjmp/longjmp, le défi principal est que setjmp retourne deux fois — une fois à l'appel, une autre après longjmp. La sauvegarde du contexte impose au compilateur de gérer correctement les variables marquées volatile, mais Fil-C garantit que la restauration d'un contexte n'accède jamais à de la mémoire libérée ou invalide.
Pour ucontext, Fil-C gère les piles de manière à rendre l'opération soit légale, soit à provoquer un panic, car les frames de pile pendantes sont simplement impossibles.
Exemple : setjmp/longjmp dans Fil-C
Le programme suivant illustre le comportement :
#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("On ne devrait pas arriver ici.\n");
return 1;
}
Cela affiche x = 666 et se termine. Sans volatile, le compilateur pourrait optimiser et afficher 42 à la place. Fil-C ne modifie pas les optimisations mais empêche la corruption mémoire quoi qu'il arrive.
À qui s'adresse cette fonctionnalité ?
Développeurs utilisant des coroutines basées sur ucontext (par exemple, Boost fibers) ou setjmp/longjmp pour la gestion d'exceptions dans des programmes C souhaitant la sécurité mémoire.
📖 Lire la source complète : HN AI Agents
👀 See Also

La Racine Humaine de la Confiance : Établir la Responsabilité des Agents d'IA Autonomes
Le Cadre de la Racine Humaine de Confiance est un cadre de domaine public qui aborde le manque de responsabilité des agents d'IA autonomes par des moyens cryptographiques.

Vulnérabilités de sécurité exposées dans l'application EdTech présentée par Lovable
Un chercheur en sécurité a découvert 16 vulnérabilités dans une application EdTech présentée sur Lovable, incluant des failles critiques de logique d'authentification qui ont exposé 18 697 enregistrements d'utilisateurs sans authentification. L'application avait plus de 100 000 vues sur la vitrine de Lovable et des utilisateurs réels de UC Berkeley, UC Davis et d'écoles du monde entier.
Le faux think tank d'Israël cible les chatbots IA avec un empoisonnement SEO
Israël a créé un faux think tank, l'Institut Hanover, publiant plus de 100 articles optimisés pour l'IA afin d'influencer les chatbots comme Claude et Gemini. Les articles imitent des rapports crédibles de think tanks avec des citations, probablement pour façonner les réponses de l'IA sur le conflit israélo-palestinien.

Passeport Agent : Vérification d'identité pour les agents IA
Agent Passport est une couche de vérification d'identité open source utilisant l'authentification Ed25519 et des jetons JWT pour les agents IA, résolvant le problème de l'usurpation d'identité des agents.