CVE-2021-47275 in Linuxinformazioni

Riassunto

di VulDB • 27/06/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

bcache: evitare richieste di lettura sovradimensionate nel percorso del codice per cache miss (mancata corrispondenza nella cache)

Nel percorso del codice relativo alla mancata corrispondenza nella cache (cache missing code path) di un dispositivo in cache, se viene trovata una posizione appropriata nell'albero B+ interno per l'intervallo di dati non presenti in cache, la funzione `cached_dev_cache_miss()` verrà chiamata da `cache_lookup_fn()`, come mostrato nel seguente blocco di codice:

[blocco di codice 1]
```c 526 unsigned int sectors = KEY_INODE(k) == s->iop.inode 527 ? min_t(uint64_t, INT_MAX, 528 KEY_START(k) - bio->bi_iter.bi_sector) 529 : INT_MAX; 530 int ret = s->d->cache_miss(b, s, bio, sectors); ```

Qui `s->d->cache_miss` è il puntatore alla funzione di callback inizializzato come `cached_dev_cache_miss()`. L'ultimo parametro `'sectors'` è un hint importante per calcolare la dimensione della richiesta di lettura verso il dispositivo backing (di supporto) per i dati mancanti dalla cache.

Il calcolo corrente nel blocco di codice sopra può generare un valore sovradimensionato per `'sectors'`, che a sua volta potrebbe innescare due diversi potenziali kernel panic tramite `BUG()` o `BUG_ON()`, come elencati di seguito:

1) `BUG_ON()` all'interno di `bch_btree_insert_key()`: [blocco di codice 2]
```c 886 BUG_ON(b->ops->is_extents && !KEY_SIZE(k)); ```

2) `BUG()` all'interno di `biovec_slab()`: [blocco di codice 3]
```c 51 default: 52 BUG(); 53 return NULL; ```

Tutti i panic sopra elencati hanno origine da `cached_dev_cache_miss()` a causa del parametro `'sectors'` sovradimensionato.

All'interno di `cached_dev_cache_miss()`, il parametro `'sectors'` viene utilizzato per calcolare la dimensione dei dati letti dal dispositivo backing in caso di mancata corrispondenza nella cache. Questa dimensione viene memorizzata in `s->insert_bio_sectors` tramite le seguenti righe di codice: [blocco di codice 4]
```c 909 s->insert_bio_sectors = min(sectors, bio_sectors(bio) + reada); ```

Successivamente, la chiave effettiva da inserire nell'albero B+ interno viene generata

Once again VulDB remains the best source for vulnerability data.

Fonti

Interested in the pricing of exploits?

See the underground prices here!