Odebrany

CVE-2026-81001

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

poślizg: napraw użycie po zwolnieniu w sl_sync()

slip_devs[] przechowuje same wskaźniki net_device i nie przyjmuje żadnych odniesień
oni. sl_sync() i sl_alloc() przechodzą po tej tabeli z slip_open() pod
rtnl_lock(), podczas gdy wpis jest usuwany przez sl_free_netdev(), która
sl_setup() instaluje się jako dev->priv_destructor.

priv_destructor jest wywoływany z metody netdev_run_todo(), która celowo
działa ze zwolnionym semaforem RTNL, dzięki czemu może spać podczas oczekiwania
aby przeliczenie urządzenia spadło:

/* Lista migawek, zezwalaj na późniejsze żądania */
list_replace_init(&net_todo_list, &list);

__rtnl_unlock();
...
if (dev->priv_destructor)
dev->priv_destructor(dev); /* slip_devs[i] = NULL */
if (dev->needs_free_netdev)
free_netdev(dev);
...
/* Bezpłatne urządzenie sieciowe */
kobject_put(&dev->dev.kobj);

Zatem rtnl_lock() nie serializuje slip_open() w przypadku porzucenia w
wszystko. sl_sync() może załadować slip_devs[i], gdy wpis jest nadal opublikowany
i wyrejestruj go po uruchomieniu destruktora przez funkcję netdev_run_todo() i
wypuścił urządzenie:

CPU0 (slip_open) CPU1 (slip_close)
wyrejestruj_netdev()
rtnl_unlock()
netdev_run_todo()
__rtnl_unlock()
rtnl_lock()
sl_sync()
dev = slip_devs[i]
priv_destructor(dev)
slip_devs[i] = NULL
kobject_put(&dev->dev.kobj)
/* programista zostaje zwolniony */
sl = netdev_priv(dev)
if (sl->tty || sl->leased) /* użyj-po-bezpłatnym */

BŁĄD: KASAN: użycie po zwolnieniu w sl_sync sterowniki/net/slip/slip.c:730 [inline]
BŁĄD: KASAN: użycie po zwolnieniu w slip_open+0xef4/0x1210 sterowniki/net/slip/slip.c:806
Odczytaj rozmiar 1 pod adresem ffff8880712dac71 za pomocą zadania syz-executor.2/6506

Procesor: 2 PID: 6506 Comm: syz-executor.2 Nieskażony 6.1.134-syzkaller-00260-g0c8fc3469765 #0
Nazwa sprzętu: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 01.04.2014
Zadzwoń do śledzenia:
sl_sync sterowniki/net/slip/slip.c:730 [inline]
slip_open+0xef4/0x1210 sterowniki/net/slip/slip.c:806
tty_ldisc_open+0xa2/0x120 sterowniki/tty/tty_ldisc.c:433
tty_set_ldisc+0x324/0x720 sterowniki/tty/tty_ldisc.c:564
tiocsetd sterowniki/tty/tty_io.c:2428 [wbudowane]
tty_ioctl+0x5f0/0x1530 sterowniki/tty/tty_io.c:2712

Przydzielone przez zadanie 6502:
alloc_netdev_mqs+0x98/0xfe0 net/core/dev.c:10719
sl_alloc sterowniki/net/slip/slip.c:756 [inline]
slip_open+0x36d/0x1210 sterowniki/net/slip/slip.c:817
tty_ldisc_open+0xa2/0x120 sterowniki/tty/tty_ldisc.c:433
tty_set_ldisc+0x324/0x720 sterowniki/tty/tty_ldisc.c:564

Uwolniony przez zadanie 6497:
urządzenie_release+0xa2/0x240 sterowniki/base/core.c:2507
kobject_put+0x179/0x280 lib/kobject.c:729
netdev_run_todo+0x6c8/0xef0 net/core/dev.c:10509
slip_close+0x166/0x1c0 sterowniki/net/slip/slip.c:906
tty_ldisc_close+0x113/0x1a0 sterowniki/tty/tty_ldisc.c:456
tty_ldisc_kill+0x94/0x160 sterowniki/tty/tty_ldisc.c:614
tty_ldisc_release+0xe3/0x2b0 sterowniki/tty/tty_ldisc.c:782
tty_release+0xbcc/0xe70 sterowniki/tty/tty_io.c:1860

Naprawiono e58c19124189 („poślizg: napraw użycie po zwolnieniu Przeczytaj w slip_open”)
inne źródło nieaktualnych wpisów - urządzenie pozostawione w slip_devs[] po
slip_open() uwolniła go na ścieżce błędu rejestracji - i tak się nie dzieje
zająć się tym wyścigiem i dlatego sprawozdanie przetrwało ten wyścig.

Zamiast tego usuń wpis z ndo_uninit. wywołania unregister_netdevice().
ndo_uninit w RTNL, zanim urządzenie zostanie umieszczone w kolejce do netdev_run_todo(),
więc wpis, który sl_sync() nadal widzi, trzymając RTNL, należy do a
urządzenie, którego nie można zwolnić, dopóki RTNL nie zostanie usunięte. sl_free_netdev()
pozostaje tylko dla ścieżki błędu slip_open(), gdzie Register_netdevice()
mogło się nie udać, zanim ndo_init i ndo_uninit nie zostaną wówczas wywołane
albo. Obydwa działania na tym samym urządzeniu są nieszkodliwe: plik
---obcięty---

>_ Referencje

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