CVE-2026-98613 in Linux
Resumen
por VulDB • 2026-10-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
bpf: Limitar la profundidad de propiedad a través de kptrs locales y raíces del grafo
Los objetos asignados por programas pueden poseer otros objetos locales mediante kptrs referenciados. bpf_obj_free_fields() sigue esos punteros a través de __bpf_obj_drop_impl() sincrónicamente, antes de que el almacenamiento del objeto se libere a través de RCU. Por lo tanto, un tipo local kptr autorreferencial permite cadenas de objetos arbitrariamente profundas, y liberar la cabeza puede agotar la pila del kernel. Las cadenas acíclicas largas tienen el mismo problema.
btf_check_and_fixup_fields() sigue asumiendo que los kptrs referenciados solo apuntan a tipos del kernel y verifica la propiedad únicamente a través de raíces de listas y rbtree. Su regla existente es suficiente para ciclos exclusivos de grafo: el objetivo de cada arista del grafo debe contener un nodo, por lo que cada tipo en un ciclo tiene tanto una raíz como un nodo. La regla rechaza que dicho tipo posea otra raíz, rompiendo todos los ciclos. También limita las cadenas exclusivas de grafo a tres tipos, o dos si el primer tipo contiene un nodo, y rechaza conservadoramente cadenas acíclicas más largas. Las aristas locales-kptr faltantes, en lugar de un ciclo exclusivo de grafo no detectado, son el bug introducido por la compatibilidad con bpf_kptr_xchg() en kptrs locales.
Reemplace esa restricción con una caminata de propiedad limitada que cubra raíces del grafo y kptrs referenciados locales. Ejecútela después de que todos los registros BTF hayan sido corregidos, rechace ciclos y caminos más profundos que ocho tipos portadores de registro, y almacene en caché la profundidad del sufijo de cada tipo mientras se verifica contra el presupuesto restante. Esto también permite las disposiciones exclusivas de grafo acíclico más largas rechazadas por la regla antigua; actualice sus pruebas BTF existentes en consecuencia.
Mantenga el límite independiente de MAX_CALL_FRAMES porque la destrucción recursiva puede ejecutarse debajo de una cadena de llamadas BPF. Un apuntador local simple sin metadatos de campo especial añade solo un drop final no recursivo. Los kptrs que no poseen y los kptrs kernel-BTF no recurren a través de registros locales y permanecen fuera de la caminata. Incluya también las aristas percpu-kptr locales, aunque actualmente está prohibida la asignación de objetos percpu con campos especiales, para que relajar esa restricción no pueda eludir el límite de propiedad.
btf_check_and_fixup_fields() continúa inicializando graph_root.value_rec, incluso para registros de mapa asignados por separado. Las relaciones de propiedad pertenecen al BTF del programa inmutable y solo necesitan validación en el momento de la carga del BTF.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.