CVE-2025-39756

Siemens ProductCERT Advisory SSA-019113

Beschreibung

Im Linux-Kernel wurde folgende Schwachstelle behoben:

fs: Verhindern von Dateideskriptortabellen-Allokationen, die INT_MAX überschreiten

Wenn sysctl_nr_open auf einen sehr hohen Wert gesetzt wird (zum Beispiel 1073741816, wie von systemd festgelegt), können Prozesse, die versuchen, Dateideskriptoren nahe der Grenze zu verwenden, massive Speicher-Allokationsversuche auslösen, die INT_MAX überschreiten. Dies führt zu einer WARNUNG in mm/slub.c:

WARNUNG: CPU: 0 PID: 44 at mm/slub.c:5027 __kvmalloc_node_noprof+0x21a/0x288

Dies geschieht, weil kvmalloc_array() und kvmalloc() prüfen, ob die angeforderte Größe INT_MAX überschreitet, und eine Warnung ausgeben, wenn die Allokation nicht mit __GFP_NOWARN markiert ist.

Konkret, wenn nr_open auf 1073741816 (0x3ffffff8) gesetzt wird und ein Prozess dup2(oldfd, 1073741880) aufruft, versucht der Kernel zu allozieren:

  • Dateideskriptortabelle: 1073741880 * 8 Bytes = 8.589.935.040 Bytes
  • Mehrere Bitmaps: ~400 MB
  • Gesamtallozierungsgröße: > 8 GB (überschreitet INT_MAX = 2.147.483.647)

Reproduktion:

  1. Setze /proc/sys/fs/nr_open auf 1073741816:

    echo 1073741816 > /proc/sys/fs/nr_open

  2. Führe ein Programm aus, das viele Dateideskriptoren verwendet: #include <unistd.h> #include <sys/resource.h>

    int main() { struct rlimit rlim = {1073741824, 1073741824}; setrlimit(RLIMIT_NOFILE, &rlim); dup2(2, 1073741880); // Triggert die Warnung return 0; }

  3. Beobachte WARNUNG in dmesg bei mm/slub.c:5027

Der systemd-Commit a8b627a führte eine automatische Erhöhung von fs.nr_open auf den maximal möglichen Wert ein. Die Begründung war, dass Systeme mit Speicherkontrollgruppen (memcg) keine separaten Dateideskriptorlimits mehr benötigen, da der Speicher korrekt abgerechnet wird. Diese Änderung überging jedoch, dass:

  1. Die Allokationsfunktionen des Kernels weiterhin INT_MAX als maximale Größe durchsetzen, unabhängig von memcg-Accounting
  2. Programme und Tests, die legitimerweise Dateideskriptorlimits testen, versehentlich massive Allokationen auslösen können
  3. Die resultierenden Allokationen (>8GB) sind unrealistisch und werden immer fehlschlagen

Das systemd-Algorithmus beginnt mit INT_MAX und halbiert den Wert weiter, bis der Kernel ihn akzeptiert. Auf den meisten Systemen führt dies dazu, dass nr_open auf 1073741816 (0x3ffffff8) gesetzt wird, was knapp unter 1 GB Dateideskriptoren liegt.

Obwohl Prozesse selten in normaler Betriebsweise Dateideskriptoren nahe dieser Grenze verwenden, können bestimmte Selbsttests (wie tools/testing/selftests/core/unshare_test.c) und Programme, die Dateideskriptorlimits testen, dieses Problem auslösen.

Dies wird behoben, indem in alloc_fdtable() eine Überprüfung hinzugefügt wird, um sicherzustellen, dass die angeforderte Allokationsgröße INT_MAX nicht überschreitet. Dies führt dazu, dass der Vorgang mit -EMFILE fehlschlägt anstatt eine Kernelwarnung auszulösen und vermeidet die unrealistische >8GB-Speicher-Allokierungsanfrage.

Metriken

Severity
medium
kein öffentlicher PoC bekannt
5.5
Quelle: nvd-v3
7.3 %
Niedrig — CVE gehört zu den unteren 10 % der heute bewerteten CVEs.
0.2 %
Niedrig — Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
Veröffentlicht
2021-09-26 00:00 UTC

Betroffene Betriebssysteme

  • linux

    amazon / amazon_linux

  • linux

    ubuntu / awsbionic

  • linux

    ubuntu / awsjammy

  • linux

    ubuntu / awsnoble

  • linux

    ubuntu / awsresolute

  • linux

    ubuntu / awsxenial

  • linux

    ubuntu / aws-6.8jammy

  • linux

    ubuntu / aws-hwexenial

  • linux

    ubuntu / azurejammy

  • linux

    ubuntu / azurenoble

  • linux

    ubuntu / azureresolute

  • linux

    ubuntu / azurexenial

  • linux

    ubuntu / azure-4.15bionic

  • linux

    suse / basesystem_module15

  • linux

    debian / debian_linux11.0

  • linux

    debian / debian_linux12.0

  • linux

    debian / debian_linux13.0

  • linux

    suse / development_tools_module15

  • linux

    redhat / enterprise_linux10.0

  • linux

    redhat / enterprise_linux7.0

  • linux

    redhat / enterprise_linux8.0

  • linux

    redhat / enterprise_linux9.0

  • linux

    redhat / enterprise_linux_aus8.4

  • linux

    redhat / enterprise_linux_aus8.6

Betroffene Produkte

Aus der Hersteller-/CERT-Meldung extrahierte Produkte und Versionsbereiche. Ein Version-Range wie „<4.14.6“ impliziert die Update-Empfehlung „auf 4.14.6 oder höher aktualisieren“.

  • arista

    cloudvision_agni2024.4.0 – 2025.2.2

  • arista

    cloudvision_portal2024.2.0 – 2026.1.0

  • arista

    velocloud_edge4.5.0 – 6.4.1

  • arista

    velocloud_gateway

  • arista

    velocloud_orchestrator

  • canonical

    ubuntu_linux

  • Citrix Systems

    Hypervisor8.2 CU1 LTSR

  • Citrix Systems

    XenServer8.4

  • Dell

    ECS3.8.1.0-3.8.1.7

  • Dell

    NetWorkerVirtual Edition

  • Dell

    NetWorkervProxy 19.13.0.3

  • Dell

    NetWorkervProxy 19.14

  • Dell

    PowerScale OneFS13.2.3

  • Dell

    PowerScale OneFSOneFS

  • Dell

    Secure Connect GatewayAppliance 5.32.00.18

  • gnupg

    libgcrypt1.11.0 – 1.11.3

  • gnupg

    libgcrypt1.12.0 – 1.12.2

  • gnupg

    libgcrypt1.8.8 – 1.10.4

  • Intel

    ProzessorCore Ultra 5

  • Intel

    ProzessorCore Ultra 7

  • Intel

    ProzessorCore Ultra 9

  • julia

    openssh_jll

  • netapp

    active_iq_unified_manager

  • netapp

    clustered_data_ontap

Quellen & Referenzen

Verknüpfte CVEs

406 weitere CVEs anzeigen
IDCVE-2025-39756
Siemens ProductCERT Advisory SSA-019113 — CVE-2025-39756 | NEOSEC Intel