El kernel de Linux elimina strncpy tras seis años de refactorización

Fuentes: Linux Kills strncpy

El núcleo de Linux ha completado la retirada de la función strncpy, una labor que ha requerido seis años y más de 360 parches. strncpy, heredada de la biblioteca de cadenas de C (lenguaje creado en 1972), se diseñó como corrección de strcpy para evitar desbordamientos de búfer, pero presenta dos problemas muy extendidos: no garantiza la terminación en nulo de la cadena resultante y, si la fuente es más corta que el destino, rellena el resto con bytes nulos, un comportamiento que la mayoría de programadores desconoce y rara vez necesita. Estos defectos han generado durante décadas vulnerabilidades de seguridad explotadas por atacantes.

La sustitución principal es strscpy, que delimita la copia, asegura la terminación en nulo y devuelve el código de error E2BIG cuando se trunca la fuente, lo que permite comprobar el resultado. strscpy_pad añade el relleno con ceros cuando se necesita explícitamente. Para campos de memoria de ancho fijo se recomienda strtomem_pad; para copiar y rellenar, memcpy_and_pad; y para un número de bytes conocido, memcpy. Estas funciones separan la semántica de copia de bytes de la de cadenas, aclaran la intención del código y mejoran la eficiencia al eliminar trabajo innecesario.

El proceso no fue trivial: cada ocurrencia se estudió caso por caso para elegir el reemplazo adecuado. El artículo subraya la importancia de un buen diseño de API y cómo los errores históricos de la biblioteca de C han tardado décadas en corregirse sin perder eficiencia.