CVE-2026-89777
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
vfio/pci: wyczyść vdev->msi_perm po zwolnieniu go w przypadku niepowodzenia inicjowania
vfio_msi_cap_len() leniwie przydziela tabelę uprawnień MSI dla poszczególnych urządzeń:
vdev->msi_perm = kmalloc_obj(struct perm_bits, GFP_KERNEL_ACCOUNT);
if (!vdev->msi_perm)
zwróć -ENOMEM;
ret = init_pci_cap_msi_perm(vdev->msi_perm, len, flagi);
jeśli (ret) {
kfree(vdev->msi_perm);
powrót powrót; /* vdev->msi_perm pozostawiony w zawieszeniu */
}
Gdy init_pci_cap_msi_perm() -> alloc_perm_bits() zakończy się niepowodzeniem z opcją -ENOMEM,
ścieżka błędu zwalnia vdev->msi_perm, ale pozostawia zwolniony wskaźnik przechowywany w
to. vdev->msi_perm nie zostanie później ponownie zerowany, ponieważ struct
vfio_pci_core_device jest przypisane do urządzenia i utrzymuje się w cyklach otwierania/zamykania,
a ścieżka błędu vfio_config_init() powraca bez wywołania
vfio_config_free(). Zatem zwisający wskaźnik przeżywa nieudane otwarcie.
Prowadzi to do dwóch darmowych zastosowań na tym samym urządzeniu:
1. Użyj ponownie. Następna funkcja vfio_config_init() widzi nieaktualny wskaźnik
„if (vdev->msi_perm) zwróć len;” i ponownie wykorzystuje uwolniony obiekt. MSI
config uzyskuje dostęp do vfio_pci_config_rw_single(), a następnie dereferuje i
wywołaj zwolnione wskaźniki funkcji perm->readfn / perm->writefn.
2. Podwójnie gratis. Późniejsza wersja vfio_config_free() uruchamia free_perm_bits() i
kfree() na już uwolnionym obiekcie.
Napraw to, ustawiając wartość NULL vdev->msi_perm po kfree(), dopasowując plik
Dyscyplina NULL-after-free jest już używana w free_perm_bits() i
vfio_config_free().
BŁĄD: KASAN: płyta-use-after-free w vfio_pci_config_rw_single (drivers/vfio/pci/vfio_pci_config.c:1961)
Odczytaj rozmiar 8 pod adresem ffff88800fcc88d0 za pomocą zadania exploit/143
Zadzwoń do śledzenia:
...
kasan_report (mm/kasan/report.c:595)
vfio_pci_config_rw_single (drivers/vfio/pci/vfio_pci_config.c:1961)
vfio_pci_config_rw (drivers/vfio/pci/vfio_pci_config.c:1986)
vfio_pci_rw (sterowniki/vfio/pci/vfio_pci_core.c:1599)
vfs_read (fs/read_write.c:572)
__x64_sys_pread64 (fs/read_write.c:764)
do_syscall_64 (arch/x86/entry/syscall_64.c:94)
...
Śledzone na urządzeniu w pobliżu podwójnego wolnego od tego samego obiektu:
Ups: ogólny błąd ochrony, prawdopodobnie dla adresu niekanonicznego
0x1f63e0e8000008: 0000 [#1] SMP KASAN NOPTI
RIP: 0010:kfree (mm/slub.c:6711)
Zadzwoń do śledzenia:
vfio_config_free (drivers/vfio/pci/vfio_pci_config.c:1861)
vfio_pci_core_disable (sterowniki/vfio/pci/vfio_pci_core.c:685)
vfio_pci_core_close_device (sterowniki/vfio/pci/vfio_pci_core.c:777)
vfio_df_close (drivers/vfio/vfio_main.c:602)
vfio_device_fops_release (drivers/vfio/vfio_main.c:648)
__fput (fs/file_table.c:512)
__x64_sys_close (fs/open.c:1496)
do_syscall_64 (arch/x86/entry/syscall_64.c:94)
...
Panika jądra – brak synchronizacji: wyjątek krytyczny
>_ Referencje
- https://git.kernel.org/stable/c/25cdd2a492d868cff1e519a60fe282909c52d385
- https://git.kernel.org/stable/c/533d0c5feef85ee6404b9f41d5564fac6971a008
- https://git.kernel.org/stable/c/812f1db7f0755a19ef16ecdc5cec51bcabc5eda5
- https://git.kernel.org/stable/c/d665a1688af7f8fefd7c0eb04f2a37122ce007f4
- https://git.kernel.org/stable/c/dc77acfeb979dded39b247b60fef0399536bfa77
- https://git.kernel.org/stable/c/eb84cd81040e58dd05ac190f561f2115e3367249
- https://git.kernel.org/stable/c/f0eea8f9013676b42289ec35941e848b8a543e19
- https://git.kernel.org/stable/c/fda8fb7e8179561693a786a7af593f6b944a21c1
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org