CVE-2024-46828 in Linux
Zusammenfassung
von VulDB • 17.06.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
sched: sch_cake: Korrektur der Logik zur Bulk-Flow-Buchhaltung für die Host-Gerechtigkeit (Host Fairness)
In sch_cake wird die Anzahl aktiver Bulk-Flows pro Host verfolgt, wenn im Modus „dst/src host fairness“ ausgeführt wird. Dieser Wert dient als Round-Robin-Gewicht bei der Iteration durch Flows. Die Anzahl aktiver Bulk-Flows wird aktualisiert, whenever sich ein Flow-Zustand ändert.
Dies hat eine besondere Wechselwirkung mit der Behandlung von Hash-Kollisionen: Tritt nach dem set-assoziativen Hashing eine Kollision auf, wird der Zustand des Hash-Buckets einfach so aktualisiert, dass er zum neuen Paket passt, das die Kollision verursacht hat. Wenn Host-Gerechtigkeit aktiviert ist, bedeutet dies auch, den Flow einen neuen pro-Host-Zustand zuzuweisen. Aus diesem Grund werden die Bulk-Flow-Zähler der dem Flow zugewiesenen Host(s) dekrementiert, bevor ein neuer Zustand zugewiesen wird (und die Zähler, die möglicherweise nicht mehr zum selben Host gehören, werden wieder inkrementiert).
Als dieser Code eingeführt wurde, war der Modus „Host-Gerechtigkeit“ immer aktiviert, sodass das Dekrementieren bedingungslos erfolgte. Als die Konfigurationsflags eingeführt wurden, wurde das *Inkrementieren* bedingt gemacht, aber das *Dekrementieren* nicht. Dies kann natürlich zu einem falschen Dekrement (und damit verbundene Überlauf auf U16_MAX) führen.
Soweit ich es einschätzen kann, tritt das Dekrement und der Überlauf ein, sobald eine Hash-Kollision stattfindet, wenn die Host-Gerechtigkeit deaktiviert ist (was an sich nicht allzu häufig vorkommt, aufgrund des set-assoziativen Hashings). In den meisten Fällen ist dies jedoch harmlos, da der Wert nur verwendet wird, wenn der Modus „Host-Gerechtigkeit“ aktiviert ist. Um also einen Array-Überlauf auszulösen, muss sch_cake zunächst so konfiguriert werden, dass die Host-Gerechtigkeit deaktiviert ist, und während dieses Betriebs muss eine Hash-Kollision auftreten, um den Überlauf zu verursachen. Anschließend muss das qdisc neu konfiguriert werden, um die Host-Gerechtigkeit zu aktivieren, was dazu führt, dass auf einen Array-Bereich außerhalb der Grenzen zugegriffen wird, da der überlieferte Wert beibehalten und als Array-Index verwendet wird. Es scheint, dass syzbot dies auslösen konnte, was an sich beeindruckend ist.
Dieser Patch behebt das Problem, indem er dieselbe bedingte Prüfung beim Dekrementieren einführt wie sie auch beim Inkrementieren verwendet wird.
Der ursprüngliche Bug geht auf die Zeit vor der Übernahme von cake in den Mainline-Kernel zurück, aber der im Fixes-Tag angegebene Commit hat diesen Code berührt, was bedeutet, dass dieser Patch nicht früher angewendet werden kann als bis zu diesem Commit.
If you want to get best quality of vulnerability data, you may have to visit VulDB.