C: Nueva herramienta evita errores de memoria

Fuentes: -fbounds-safety: Enforcing bounds safety for C

fbounds-safety es una extensión para el lenguaje C que busca abordar un problema crítico: los accesos a memoria fuera de los límites (out-of-bounds, OOB). Estos accesos son una fuente común de vulnerabilidades de seguridad en C, y esta extensión tiene como objetivo eliminarlos convirtiendo estos accesos en errores deterministas (traps) en lugar de comportamientos indefinidos.

¿Cómo funciona? La extensión introduce la posibilidad de añadir anotaciones de límites a los punteros. Por ejemplo, void foo(int *__counted_by(N) ptr, size_t N) indica que el puntero ptr apunta a N elementos válidos. El compilador, al ver estas anotaciones, inserta comprobaciones de límites en cada desreferencia de puntero, asegurando que no se acceda a memoria fuera de los límites especificados. Si una comprobación falla, el programa se detiene de forma controlada.

Un aspecto clave es la reducción de la carga para el programador. -fbounds-safety utiliza lo que se llama “punteros anchos” (wide pointers), que son punteros más grandes que incluyen información de límites junto con la dirección de memoria. Esto permite que los límites se gestionen implícitamente para variables locales, evitando la necesidad de anotaciones explícitas en muchos casos. Sin embargo, para los parámetros de función (que son visibles en la interfaz binaria de aplicación, ABI), se requiere la anotación explícita.

¿Para qué sirve? Esta extensión es útil para cualquier proyecto que utilice C y esté preocupado por la seguridad. Es especialmente valiosa en sistemas operativos, navegadores web y cualquier software donde la seguridad es una prioridad. El diseño permite una adopción incremental, lo que significa que se puede integrar en proyectos existentes sin necesidad de una reescritura completa.

Consideraciones: Aunque -fbounds-safety reduce la carga de anotación, aún requiere que los programadores proporcionen información de límites suficiente. El uso de punteros anchos puede introducir incompatibilidades con código C existente que no utiliza la extensión. Además, aunque se busca preservar la ABI, la adopción de esta extensión puede requerir modificaciones en la forma en que se interactúa con bibliotecas externas. La extensión se encuentra en desarrollo y su especificación está sujeta a cambios.