CVE-2024-35877

Siemens ProductCERT Advisory SSA-265688

Beschreibung

Im Linux-Kernel wurde folgende Schwachstelle behoben:

x86/mm/pat: Behebung der VM_PAT-Verarbeitung in COW-Zuordnungen

Die Verarbeitung von PAT funktioniert nicht richtig bei COW-Zuordnungen: die erste PTE (oder tatsächlich alle PTEs) kann während Schreibfehlern ersetzt werden, um auf anonyme Folios zu zeigen. Die zuverlässige Wiederherstellung des korrekten PFN und der Cachemodus mit follow_phys() aus den PTEs wird bei COW-Zuordnungen nicht funktionieren.

Mit follow_phys(), könnten wir einfach die Adresse+Schutz des anonymen Folios erhalten (was sehr falsch ist), oder scheitern bei Swap/Non-Swap-Einträgen, was zu einem Scheitern von follow_phys() und einer Auslösung eines WARN_ON_ONCE() in untrack_pfn() und track_pfn_copy() führt, ohne korrekt free_pfn_range() aufzurufen.

In free_pfn_range(), würden wir entweder nicht memtype_free() aufrufen oder es mit dem falschen Bereich aufrufen, was zu einem möglichen Speicherleck führen könnte.

Um das zu beheben, aktualisieren wir follow_phys(), um anonyme Folios nicht zurückzugeben und bei COW-Zuordnungen auf den gespeicherten PFN im vma->vm_pgoff zurückzugreifen, wenn wir darauf stoßen.

Wir behandeln nun untrack_pfn() mit COW-Zuordnungen korrekt, wo wir keinen Cachemodus benötigen. Wir müssen jedoch fork()->track_pfn_copy() scheitern lassen, wenn die erste Seite durch ein anonymes Folio ersetzt wurde: Wir müssten den Cachemodus in der VMA speichern, um das zu ermöglichen, was wahrscheinlich das Wachstum der VMA-Größe zur Folge hätte.

Für den Moment halten wir es einfach und lassen track_pfn_copy() in diesem Fall einfach scheitern: Es wäre bereits mit Swap/Non-Swap-Einträgen gescheitert und hätte falsch gehandelt, wenn anonyme Folios betroffen wären.

Einfacher Reproduzent zum Auslösen des WARN_ON_ONCE() in untrack_pfn():

<--- C-Reproduzent --->

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <liburing.h>

int main(void)
{
        struct io_uring_params p = {};
        int ring_fd;
        size_t size;
        char *map;

        ring_fd = io_uring_setup(1, &p);
        if (ring_fd < 0) {
                perror("io_uring_setup");
                return 1;
        }
        size = p.sq_off.array + p.sq_entries * sizeof(unsigned);

        /* Mappe die Submission-Queue-Ring MAP_PRIVATE */
        map = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE,
                   ring_fd, IORING_OFF_SQ_RING);
        if (map == MAP_FAILED) {
                perror("mmap");
                return 1;
        }

        /* Wir haben mindestens eine Seite. Lass uns COW machen. */
        *map = 0;
        pause();
        return 0;
}
<--- Ende des C-Reproduzenten --->

Auf einem System mit 16 GiB RAM und Swap konfiguriert:
```bash
# ./iouring &
# memhog 16G
# killall iouring
[  301.552930] ------------[ cut here ]------------
[  301.553285] WARNING: CPU: 7 PID: 1402 at arch/x86/mm/pat/memtype.c:1060 untrack_pfn+0xf4/0x100
[  301.553989] Modules linked in: binfmt_misc nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_g
[  301.558232] CPU: 7 PID: 1402 Comm: iouring Not tainted 6.7.5-100.fc38.x86_64 #1
[  301.558772] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebu4
[  301.559569] RIP: 0010:untrack_pfn+0xf4/0x100
[  301.559893] Code: 75 c4 eb cf 48 8b 43 10 8b a8 e8 00 00 00 3b 6b 28 74 b8 48 8b 7b 30 e8 ea 1a f7 000
[  301.561189] RSP: 0018:ffffba2c0377fab8 EFLAGS: 00010282
[  301.561590] RAX: 00000000ffffffea RBX: ffff9208c8ce9cc0 RCX: 000000010455e047
[  301.562105] RDX: 07fffffff0eb1e0a RSI: 0000000000000000 RDI: ffff9208c391d200
[  301.562628] RBP: 0000000000000000 R08: ffffba2c0377fab8 R09: 0000000000000000
[  301.563145] R10: ffff9208d2292d50 R11: 0000000000000002 R12: 00007fea890e0000
[  301.563669] R13: 0000000000000000 R14: ffffba2c0377fc08 R15: 0000000000000000
[  301.564186] FS:  0000000000000000(0000) GS:ffff920c2fbc0000(0000) knlGS:0000000000000000
[  301.564773] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  301.565197] CR2: 00007fea88ee8a20 CR3: 00000001033a8000 CR4: 0000000000750ef0
[  301.565725] PKRU: 55555554
[  301.565944] Call Trace:
[  301.566148]  <TASK>
[  301.566325]  ? untrack_pfn+0xf4/0x100
[  301.566618]  ? __warn+0x81/0x130
[  301.566876]  ? untrack_pfn+0xf4/0x100
[  3
---truncated---

Metriken

Severity
none
kein öffentlicher PoC bekannt
16.9 %
Erhöht — CVE ist relevanter als mindestens 10 % der heute bewerteten CVEs.
0.3 %
Niedrig — Modell schätzt < 1 % Ausnutzungs-Wahrscheinlichkeit.
Veröffentlicht
2022-02-18 00:00 UTC

Betroffene Betriebssysteme

  • linux

    amazon / amazon_linux

  • linux

    suse / basesystem_module15

  • linux

    debian / debian_linux10.0

  • 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_linux8.0

  • linux

    redhat / enterprise_linux9.0

  • linux

    redhat / enterprise_linux_aus8.4

  • linux

    redhat / enterprise_linux_aus8.6

  • linux

    redhat / enterprise_linux_eus10.0

  • linux

    redhat / enterprise_linux_eus8.4

  • linux

    redhat / enterprise_linux_eus9.4

  • linux

    redhat / enterprise_linux_eus9.6

  • linux

    redhat / enterprise_linux_tus8.6

  • linux

    redhat / enterprise_linux_tus8.8

  • linux

    redhat / enterprise_linux_update_services_for_sap_solutions8.6

  • linux

    redhat / enterprise_linux_update_services_for_sap_solutions8.8

  • linux

    redhat / enterprise_linux_update_services_for_sap_solutions9.0

  • linux

    redhat / enterprise_linux_update_services_for_sap_solutions9.2

  • linux

    opensuse / leap15.3

  • linux

    opensuse / leap15.4

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“.

  • android

    :linux_kernel::0

  • android

    :linux_kernel:Kernel

  • 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

  • bitnami

    java-min1.9.0

  • Dell

    ECS3.8.1.0

  • Dell

    NetWorkerVirtual Edition

  • Dell

    NetWorkervProxy

  • Dell

    PowerProtect Data Domain7.10.1.70

  • Dell

    PowerProtect Data Domain7.13.1.40

  • Dell

    PowerProtect Data Domain8.3.1.10

  • Dell

    PowerProtect Data Domain8.4.0.0

  • Dell

    PowerProtect Data Domain< 7.10.1.70

    gefixt in 7.10.1.70

  • Dell

    PowerProtect Data Domain< 7.13.1.40

    gefixt in 7.13.1.40

  • Dell

    PowerProtect Data Domain< 8.3.1.10

    gefixt in 8.3.1.10

  • Dell

    PowerProtect Data Domain< 8.4.0.0

    gefixt in 8.4.0.0

  • Dell

    PowerScale OneFSNode Firmware Package 14.1

  • Dell

    Secure Connect GatewayAppliance 5.32.00.18

  • Hitachi Energy

    RTU500< 13.9.1

    gefixt in 13.9.1

  • HPE

    HP-UXOpenSSL Software <A.03.00.15.001

  • IBM

    AIX7.2

Quellen & Referenzen

Verknüpfte CVEs

423 weitere CVEs anzeigen
IDCVE-2024-35877
Siemens ProductCERT Advisory SSA-265688 — CVE-2024-35877 | NEOSEC Intel