CVE-2021-47275 in Linux
Zusammenfassung
von VulDB • 12.06.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
bcache: Vermeidung von überdimensionierten Leseanfragen im Codepfad bei Cache-Misses
Im Codepfad für Cache-Misses eines zwischengespeicherten Geräts, wenn eine passende Position aus dem internen B+-Baum für einen Bereich mit einem Cache-Fehler gefunden wird, wird die Funktion `cached_dev_cache_miss()` in `cache_lookup_fn()` innerhalb des folgenden Codeblocks aufgerufen: [Codeblock 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); ```
Hierbei ist `s->d->cache_miss()` der Callback-Funktionszeiger, der als `cached_dev_cache_miss()` initialisiert wurde. Der letzte Parameter „sectors“ ist ein wichtiger Hinweis zur Berechnung der Größe der Leseanfrage an das Backing-Device für die fehlenden Cache-Daten.
Die aktuelle Berechnung im obigen Codeblock kann einen überdimensionierten Wert für ‚sectors‘ erzeugen, was folglich zwei verschiedene potenzielle Kernel-Panic-Szenarien durch `BUG()` oder `BUG_ON()` auslösen kann, wie unten aufgeführt:
1) `BUG_ON()` innerhalb von `bch_btree_insert_key()`, [Codeblock 2]
```c 886 BUG_ON(b->ops->is_extents && !KEY_SIZE(k)); ``` 2) `BUG()` innerhalb von `biovec_slab()`, [Codeblock 3]
```c 51 default: 52 BUG(); 53 return NULL; ```
Alle oben genannten Pances gehen ursprünglich auf `cached_dev_cache_miss()` zurück, verursacht durch den überdimensionierten Parameter ‚sectors‘.
Innerhalb von `cached_dev_cache_miss()` wird der Parameter ‚sectors‘ verwendet, um die Größe des vom Backing-Device gelesenen Datenblocks für den Cache-Miss zu berechnen. Diese Größe wird in `s->insert_bio_sectors` durch folgende Codezeilen gespeichert: [Codeblock 4]
```c 909 s->insert_bio_sectors = min(sectors, bio_sectors(bio) + reada); ```
Anschließend wird der tatsächliche Schlüssel für den Einfügen in den internen B+-Baum generiert und in `s->iop.replace_key` gespeichert durch folgende Codezeilen: [Codeblock 5]
```
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.