CVE-2026-18414
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Interfejs API ADC wymaga, aby każdy sterownik odrzucił sekwencję próbkowania, której bufor docelowy jest za mały: pole bufora_rozmiaru struktury adc_sequence w dokumentach include/zephyr/drivers/adc.h informuje, że „sterownik musi upewnić się, że próbki nie zostaną zapisane poza limitem i musi zwrócić błąd, jeśli bufor okaże się niewystarczająco duży”. Kierowca ADI MAX32 nie dotrzymał tego kontraktu. start_read() w sterownikach/adc/adc_max32.c porównała bufor_size, liczbę bajtów, z liczbą próbek (kanały (1 + dodatkowe_próbki), ignorując sizeof(uint16_t), więc zaakceptowała bufor o połowie wymaganego rozmiaru. Próbki są następnie przechowywane w buforze uint16_t data->bufor przez funkcję Wrap_MXC_ADC_GetData(), która zapisuje dwa bajty na próbkę i przesuwa wskaźnik o jedno uint16_t: w adc_max32_start_channel() dla odczytów synchronicznych i w adc_max32_isr() dla odczytów asynchronicznych. Na przykład sekwencja wybierająca dwa kanały z dwubajtowym buforem przechodzi kontrolę i druga próbka jest zapisywana za końcem bufora.
W kompilacji z CONFIG_USERSPACE adc_read() i adc_read_async() są wywołaniami systemowymi. Procedura obsługi w sterownikach/adc/adc_handlers.c kopiuje sekwencję z pamięci użytkownika, sprawdza jedynie, czy [bufor, bufor + rozmiar_bufora) jest zapisywalny przez wywołujący wątek i odrzuca opcje dostarczone przez użytkownika->callback; celowo pozostawia arytmetykę rozmiaru kierowcy. Wątek trybu użytkownika, któremu przyznano dostęp do obiektu urządzenia MAX32 ADC, zatem w pełni kontroluje kanały, bufor, rozmiar_bufora i opcje->dodatkowe_próbki i może zmusić sterownik do zapisania dwukrotnie większej liczby bajtów niż mieści się w jego buforze. Ponieważ kontrola skaluje się z extra_samplings, przekroczenie jest równe długości samego bufora, aż do kanałów * 65536 bajtów za jego końcem, ponieważ wskaźnik próbki jest przewijany tylko przy powtarzającym się próbkowaniu, nigdy przy dodatkowych próbkach sekwencji.
Powstałe zapisy są wykonywane przez sterownik w trybie jądra (w samym wywołaniu systemowym, zegarze kontekstu ADC lub obsłudze przerwań ADC dla odczytów asynchronicznych), gdzie MPU nie ogranicza domeny pamięci wątku, więc zapis przechodzi liniowo z partycji użytkownika do sąsiedniej pamięci, takiej jak inne partycje, dane jądra lub stosy wątków. Skutkiem jest uszkodzenie pamięci jądra o wybranej przez atakującego długości z wybranym przez atakującego przesunięciem, prawdopodobna eskalacja uprawnień i prymitywna metoda odmowy usługi z nieuprzywilejowanego wątku trybu użytkownika. Na kompilacje bez CONFIG_USERSPACE wpływa jedynie defekt niezawodności po stronie wywołującego, ponieważ sama aplikacja dostarcza bufor.
Poprawka zastępuje to sprawdzenie w start_read() wywołaniem nowego współdzielonego pomocnika adc_sequence_validate_buffer() w sterownikach/adc/adc_common.c, przekazując sizeof(uint16_t) jako rozmiar próbki. Pomocnik oblicza aktywny_kanał sizeof(uint16_t) (1 + dodatkowe_próbki) i zwraca -ENOMEM przed rozpoczęciem jakiegokolwiek próbkowania.
>_ 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