CVE-2026-87041
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Weryfikator kolejki zgłoszeń RTIO rtio_vrfy_sqe() w subsys/rtio/rtio_syscalls.c (subsys/rtio/rtio_handlers.c przed wersją 4.3.0) zgromadził wyniki K_SYSCALL_MEMORY() w swojej fladze valid_sqe z &=. To makro zwraca wartość różną od zera w przypadku niepowodzenia (jest zbudowane na K_SYSCALL_VERIFY_MSG(), która daje !(expr)), więc każde sprawdzenie uprawnień do bufora miało skutek odwrotny do jego wyniku. Zgłoszenie, którego wskaźnik tx.buf, rx.buf lub txrx.tx_buf/txrx.rx_buf nie był dostępny dla wątku wywołującego, zostało zaakceptowane, podczas gdy prawidłowy bufor będący własnością wątku spowodował śmierć wątku wywołującego z komunikatem „oops” jądra.
Weryfikator działa w imieniu wywołania systemowego rtio_sqe_copy_in_get_handles() (dostępnego również poprzez wbudowane opakowanie rtio_sqe_copy_in()), więc jest sterowany bezpośrednio przez niezaufane dane wejściowe trybu użytkownika na dowolnym obrazie zbudowanym za pomocą CONFIG_USERSPACE. Wątek użytkownika, któremu nadano kontekst RTIO i obiekt rtio_iodev — zamierzone wykorzystanie obsługi przestrzeni użytkownika RTIO, ustalone za pomocą rtio_access_grant() — może przesłać SQE, którego wskaźnik bufora i długość nazwy jest dowolną pamięcią jądra; kontrola obiektu na sqe->iodev pozostaje niezmieniona i nadal przebiega pomyślnie, a spreparowany SQE jest przekazywany do sterownika autobusu w niezmienionej postaci.
Dalsi konsumenci odwołują się do wskaźnika z uprawnieniami nadzorcy. Ogólne procedury obsługi awaryjnej I2C i I3C RTIO (drivers/i2c/i2c_rtio_default.c, sterowniki/i3c/i3c_rtio_default.c) kopiują sqe.rx.buf/sqe.tx.buf do struktury i2c_msg i wywołują i2c_transfer(), a sterowniki SPI/I2C RTIO dostawcy zachowują się równoważnie. Zatem przesłanie RTIO_OP_RX powoduje zapisanie danych peryferyjnych w pamięci jądra według wyboru atakującego (arbitralny zapis jądra), przesłanie RTIO_OP_TX powoduje wyzerowanie pamięci jądra przez magistralę (ujawnienie pamięci jądra), a wskaźnik do niezamapowanej pamięci powoduje uszkodzenie jądra. Jest to pełna ucieczka od granicy izolacji trybu użytkownika, którą CONFIG_USERSPACE ma egzekwować.
Wada była maskowana przez lata, ponieważ wbudowane w drzewo testy RTIO w trybie użytkownika wykonują jedynie odczyty RTIO_OP_NOP i pamięci zapisane w pamięci, a żaden z nich nie osiąga objętych kontroli. Poprawka neguje każdy wynik K_SYSCALL_MEMORY() i dodatkowo sprawdza poprawność bufora transmisji TXRX w trybie tylko do odczytu, dopasowując procedury obsługi SPI, I2C i I3C.
>_ Słabości (CWE)
>_ 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