Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2025-38263)

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
09/07/2025
Última modificación:
17/07/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: bcache: arregla el puntero NULL en cache_set_flush() 1. LÍNEA#1794 - LÍNEA#1887 son algunos códigos sobre la función de bch_cache_set_alloc(). 2. LÍNEA#2078 - LÍNEA#2142 son algunos códigos sobre la función de register_cache_set(). 3. register_cache_set() llamará a bch_cache_set_alloc() en la LÍNEA#2098. 1794 estructura caché_set *bch_cache_set_alloc(estructura caché_sb *sb) 1795 { ... 1860 si (!(c->dispositivos = kcalloc(c->nr_uuids, tamaño de(void *), GFP_KERNEL)) || 1861 mempool_init_slab_pool(&c->búsqueda, 32, bch_búsqueda_cache) || 1862 mempool_init_kmalloc_pool(&c->bio_meta, 2, 1863 tamaño de(estructura bbio) + tamaño de(estructura bio_vec) * 1864 páginas_de_depósito(c)) || 1865 mempool_init_kmalloc_pool(&c->rellenar_iter, 1, tamaño_de_iter) || 1866 bioset_init(&c->bio_split, 4, offsetof(struct bbio, bio), 1867 BIOSET_NEED_BVECS|BIOSET_NEED_RESCUER) || 1868 !(c->uuids = alloc_bucket_pages(GFP_KERNEL, c)) || 1869 !(c->moving_gc_wq = alloc_workqueue("bcache_gc", 1870 WQ_MEM_RECLAIM, 0)) || 1871 bch_journal_alloc(c) || 1872 bch_btree_cache_alloc(c) || 1873 bch_open_buckets_alloc(c) || 1874 bch_bset_sort_state_init(&c->sort, ilog2(c->btree_pages))) 1875 goto err; ^^^^^^^^ 1876 ... 1883 devolver c; 1884 err: 1885 bch_cache_set_unregister(c); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1886 devolver NULL; 1887 } ... 2078 static const char *register_cache_set(struct cache *ca) 2079 { ... 2098 c = bch_cache_set_alloc(&ca->sb); 2099 if (!c) 2100 devolver err; ^^^^^^^^^^ ... 2128 ca->set = c; 2129 ca->set->cache[ca->sb.nr_this_dev] = ca; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... 2138 return NULL; 2139 err: 2140 bch_cache_set_unregister(c); 2141 return err; 2142 } (1) Si LÍNEA#1860 - LÍNEA#1874 es verdadero, entonces haga 'goto err'(LÍNEA#1875) y llame a bch_cache_set_unregister()(LÍNEA#1885). (2) Como (1) devuelve NULL(LÍNEA#1886), LÍNEA#2098 - LÍNEA#2100 retornaría. (3) Como (2) ha retornado, la LÍNEA n.º 2128 - LÍNEA n.º 2129 *no* daría el valor a c->cache[], lo que significa que c->cache[] es NULL. LA LÍNEA n.º 1624 - LÍNEA n.º 1665 son algunos códigos sobre la función de cache_set_flush(). Como (1), en la LÍNEA n.º 1885 llame a bch_cache_set_unregister() ---> bch_cache_set_stop() ---> closure_queue() -.-> cache_set_flush() (como se muestra a continuación en la LÍNEA n.º 1624) 1624 static void cache_set_flush(struct closure *cl) 1625 { ... 1654 for_each_cache(ca, c, i) 1655 if (ca->alloc_thread) ^^ 1656 kthread_stop(ca->alloc_thread); ... 1665 } (4) En la LÍNEA n.º 1655 ca es NULL (ver (3)) en cache_set_flush(), entonces ocurrió el fallo del núcleo como se muestra a continuación: [846.712887] bcache: error de register_cache() drbd6: no se puede asignar memoria [846.713242] bcache: error de register_bcache(): no se pudo registrar el dispositivo [846.713336] bcache: cache_set_free() Conjunto de caché 2f84bdc1-498a-4f2f-98a7-01946bf54287 no registrado [846.713768] ERROR: no se puede manejar la desreferencia del puntero NULL del núcleo en 00000000000009f8 [846.714790] PGD 0 P4D 0 [ 846.715129] Oops: 0000 [#1] SMP PTI [ 846.715472] CPU: 19 PID: 5057 Comm: kworker/19:16 Kdump: cargado Contaminado: G OE --------- - - 4.18.0-147.5.1.el8_1.5es.3.x86_64 #1 [ 846.716082] Nombre del hardware: ESPAN GI-25212/X11DPL-i, BIOS 2.1 15/06/2018 [ 846.716451] Cola de trabajo: eventos cache_set_flush [bcache] [ 846.716808] RIP: 0010:cache_set_flush+0xc9/0x1b0 [bcache] [ 846.717155] Código: 00 4c 89 a5 b0 03 00 00 48 8b 85 68 f6 ff ff a8 08 0f 84 88 00 00 00 31 db 66 83 bd 3c f7 ff ff 00 48 8b 85 48 ff ff ff 74 28 <48> 8b b8 f8 09 00 0 ---truncado---

Impacto