CVE-2024-43834

Siemens ProductCERT Advisory SSA-265688

Beschreibung

Im Linux-Kernel wurde folgende Schwachstelle behoben: `xdp: Behebung eines ungültigen Wartekontexts bei page_pool_destroy()` Wenn der Treiber eine Seiten-Pool verwendet, erstellt er einen Seiten-Pool mit `page_pool_create()`. Der Referenzzähler des Seiten-Pools beträgt standardmäßig 1. Ein Seiten-Pool wird nur zerstört, wenn der Referenzzähler auf 0 sinkt. `page_pool_destroy()` wird verwendet, um den Seiten-Pool zu zerstören und verringert dabei den Referenzzähler. Wird ein Seiten-Pool zerstört, wird ->disconnect() aufgerufen, was `mem_allocator_disconnect()` entspricht. Diese Funktion erlangt intern einen `mutex_lock()`. Wenn der Treiber XDP verwendet, registriert er ein Speichermodell mit `xdp_rxq_info_reg_mem_model()`. Die `xdp_rxq_info_reg_mem_model()` erhöht intern den Referenzzähler des Seiten-Pools, wenn das Speichermodell ein Seiten-Pool ist. Der Referenzzähler beträgt nun 2. Um einen Seiten-Pool zu zerstören, sollte der Treiber sowohl `page_pool_destroy()` als auch `xdp_unreg_mem_model()` aufrufen. Die `xdp_unreg_mem_model()` ruft intern `page_pool_destroy()` auf. Nur `page_pool_destroy()` verringert den Referenzzähler. Wenn ein Treiber zuerst `page_pool_destroy()`, dann `xdp_unreg_mem_model()` aufruft, wird eine Warnung über einen ungültigen Wartekontext ausgegeben. Dies liegt daran, dass `xdp_unreg_mem_model()` `page_pool_destroy()` mit `rcu_read_lock()` aufruft und `page_pool_destroy()` intern einen `mutex_lock()` erlangt. Ein Splat sieht wie folgt aus: ============================= [ BUG: Ungültiger Wartekontext ] 6.10.0-rc6+ #4 Beeinträchtigt: G W ----------------------------- ethtool/1806 versucht, den folgenden Lock zu sperren: ffffffff90387b90 (mem_id_lock){+.+.}-{4:4}, bei: mem_allocator_disconnect+0x73/0x150 Weitere Informationen zur Fehlerbehebung: Kontext-{5:5} 3 Locks werden von ethtool/1806 gehalten: Stack-Backtrace: CPU: 0 PID: 1806 Comm: ethtool Beeinträchtigt: G W 6.10.0-rc6+ #4 f916f41f172891c800f2fed Hardwarename: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021 Aufrufverfolgung: <TASK> dump_stack_lvl+0x7e/0xc0 __lock_acquire+0x1681/0x4de0 ? _printk+0x64/0xe0 ? __pfx_mark_lock.part.0+0x10/0x10 ? __pfx___lock_acquire+0x10/0x10 lock_acquire+0x1b3/0x580 ? mem_allocator_disconnect+0x73/0x150 ? __wake_up_klogd.part.0+0x16/0xc0 ? __pfx_lock_acquire+0x10/0x10 ? dump_stack_lvl+0x91/0xc0 __mutex_lock+0x15c/0x1690 ? mem_allocator_disconnect+0x73/0x150 ? __pfx_prb_read_valid+0x10/0x10 ? mem_allocator_disconnect+0x73/0x150 ? __pfx_llist_add_batch+0x10/0x10 ? console_unlock+0x193/0x1b0 ? lockdep_hardirqs_on+0xbe/0x140 ? __pfx___mutex_lock+0x10/0x10 ? tick_nohz_tick_stopped+0x16/0x90 ? __irq_work_queue_local+0x1e5/0x330 ? irq_work_queue+0x39/0x50 ? __wake_up_klogd.part.0+0x79/0xc0 ? mem_allocator_disconnect+0x73/0x150 mem_allocator_disconnect+0x73/0x150 ? __pfx_mem_allocator_disconnect+0x10/0x10 ? mark_held_locks+0xa5/0xf0 ? rcu_is_watching+0x11/0xb0 page_pool_release+0x36e/0x6d0 page_pool_destroy+0xd7/0x440 xdp_unreg_mem_model+0x1a7/0x2a0 ? __pfx_xdp_unreg_mem_model+0x10/0x10 ? kfree+0x125/0x370 ? bnxt_free_ring.isra.0+0x2eb/0x500 ? bnxt_free_mem+0x5ac/0x2500 xdp_rxq_info_unreg+0x4a/0xd0 bnxt_free_mem+0x1356/0x2500 bnxt_close_nic+0xf0/0x3b0 ? __pfx_bnxt_close_nic+0x10/0x10 ? ethnl_parse_bit+0x2c6/0x6d0 ? __pfx___nla_validate_parse+0x10/0x10 ? __pfx_ethnl_parse_bit+0x10/0x10 bnxt_set_features+0x2a8/0x3e0 __netdev_update_features+0x4dc/0x1370 ? ethnl_parse_bitset+0x4ff/0x750 ? __pfx_ethnl_parse_bitset+0x10/0x10 ? __pfx___netdev_update_features+0x10/0x10 ? mark_held_locks+0xa5/0xf0 ? _raw_spin_unlock_irqrestore+0x42/0x70 ? __pm_runtime_resume+0x7d/0x110 ethnl_set_features+0x32d/0xa20 Um dieses Problem zu beheben, wird `rhashtable_lookup_fast()` anstelle von `rhashtable_lookup()` mit `rcu_read_lock()` verwendet. Die Verwendung von xa ohne `rcu_read_lock()` ist hier sicher. xa wird durch `__xdp_mem_allocator_rcu_free()` freigegeben und dies wird durch den `call_rcu()` von `mem_xa_remove()` aufgerufen. Der `mem_xa_remove()` wird von `page_pool_destroy()` aufgerufen, wenn der Referenzzähler 0 erreicht. xa ist im Steuerungsplan bereits gut durch die Mechanismen des Referenzzählers geschützt. Daher ist das Entfernen von `rcu_read_lock()` für `page_pool_destroy()` sicher.

Metriken

Severity
none
kein öffentlicher PoC bekannt
16.0 %
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-43834
Siemens ProductCERT Advisory SSA-265688 — CVE-2024-43834 | NEOSEC Intel