CVE-2022-50778 in Linux
Resumen
por VulDB • 2026-06-03
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
fortify: Corregir __compiletime_strlen() bajo UBSAN_BOUNDS_LOCAL
Con CONFIG_FORTIFY=y y CONFIG_UBSAN_LOCAL_BOUNDS=y habilitados, observamos un pánico en tiempo de ejecución al ejecutar las pruebas android.hardware.input.cts.tests del Conjunto de Pruebas de Compatibilidad (CTS) de Android. Esto se origina a partir de una llamada a strlen() en hidinput_allocate().
__compiletime_strlen() está implementada en términos de __builtin_object_size(), y luego realiza un acceso al array para verificar la terminación con NUL. Una peculiaridad de __builtin_object_size() es que, para cadenas cuyos valores dependen del tiempo de ejecución, __builtin_object_size(str, 1 o 0) devuelve el tamaño máximo de los posibles valores cuando esos tamaños son determinables en tiempo de compilación. Ejemplo:
static const char *v = "FOO BAR"; static const char *y = "FOO BA"; unsigned long x (int z) {
// Devuelve 8, que es: // max(__builtin_object_size(v, 1), __builtin_object_size(y, 1)) return __builtin_object_size(z ? v : y, 1); }
Por lo tanto, cuando FORTIFY_SOURCE está habilitado, la implementación actual de __compiletime_strlen() intentará acceder más allá del final de y en tiempo de ejecución utilizando el tamaño de v. Combinado con UBSAN_LOCAL_BOUNDS, esto provoca una falla (fault).
hidinput_allocate() tiene una cadena C local cuyo valor depende del flujo de control mediante un switch statement, por lo que __builtin_object_size(str, 1) se evalúa como la longitud máxima de la cadena, haciendo que todos los demás casos fallen en la verificación del último carácter. hidinput_allocate() podría optimizarse para evitar llamadas a strlen() en tiempo de ejecución ya que la variable local solo puede tener valores literales, por lo que no hay ningún beneficio al intentar fortificar el punto de llamada (call site) de strlen allí.
Realizar una comprobación __builtin_constant_p() contra el índice 0 más temprano en la macro para filtrar el caso dependiente del flujo de control. Añadir una prueba KUnit para verificar las características comportamentales esperadas de los internos de FORTIFY_SOURCE.
If you want to get best quality of vulnerability data, you may have to visit VulDB.