CWE-188БазаЧерновик
Опора на расположение данных или памяти
Продукт делает неверные допущения об организации данных протокола или памяти на нижнем уровне, что приводит к непредвиденному поведению программы.
Открыть в каталоге с фильтром CWE →Связанные CAPEC
—
Связанные уязвимости
CVE-2026-21493IccDEV предоставляет набор библиотек и инструментов для работы с профилями управления цветами ICC. Версии 2.3.1.1 и ниже уязвимы для замешательства типа в своем классе CIccSingleSampledeCurveXml во время сериализации кривой XML. Эта проблема исправлена в версии 2.3.1.2.
CVE-2024-40979В ядре Linux устранена следующая уязвимость:
wifi: ath12k: исправлен сбой ядра во время возобновления работы
В настоящее время во время возобновления работы память цели QMI обрабатывается неправильно, что приводит к сбою ядра, если не поддерживается переназначение DMA:
BUG: Bad page state in process kworker/u16:54 pfn:36e80
page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x36e80
page dumped because: nonzero _refcount
Call Trace:
bad_page
free_page_is_bad_report
__free_pages_ok
__free_pages
dma_direct_free
dma_free_attrs
ath12k_qmi_free_target_mem_chunk
ath12k_qmi_msg_mem_request_cb
Причина в следующем:
После загрузки модуля ath12k микропрограмма отправляет запрос памяти хосту. Если переназначение DMA не поддерживается, ath12k отклоняет первый запрос из-за сбоя при выделении с большим размером сегмента:
ath12k_pci 0000:04:00.0: qmi firmware request memory request
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 7077888
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 8454144
ath12k_pci 0000:04:00.0: qmi dma allocation failed (7077888 B type 1), will try later with small size
ath12k_pci 0000:04:00.0: qmi delays mem_request 2
ath12k_pci 0000:04:00.0: qmi firmware request memory request
Позже микропрограмма возвращается с большим количеством, но небольших сегментов, и выделение проходит успешно:
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 262144
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 524288
ath12k_pci 0000:04:00.0: qmi mem seg type 4 size 65536
ath12k_pci 0000:04:00.0: qmi mem seg type 1 size 524288
Теперь ath12k работает. Если срабатывает приостановка, микропрограмма будет перезагружена во время возобновления работы. Как и прежде, микропрограмма сначала запрашивает два больших сегмента. В ath12k_qmi_msg_mem_request_cb() назначаются количество и размер сегментов:
ab->qmi.mem_seg_count == 2
ab->qmi.target_mem[0].size == 7077888
ab->qmi.target_mem[1].size == 8454144
Затем выделение завершается неудачей, как и прежде, и вызывается ath12k_qmi_free_target_mem_chunk() для освобождения всех выделенных сегментов. Обратите внимание, что первый сегмент пропускается, потому что его v.addr очищается из-за сбоя выделения:
chunk->v.addr = dma_alloc_coherent()
Также обратите внимание, что это приводит к утечке этого сегмента, потому что он не был освобожден.
При освобождении второго сегмента размер 8454144 передается в dma_free_coherent(). Однако помните, что этот сегмент выделяется при первой загрузке микропрограммы, перед приостановкой. Таким образом, его реальный размер составляет 524288, что намного меньше 8454144. В результате ядро обнаружило, что мы освобождаем некоторую память, которая используется, и поэтому происходит сбой.
---truncated---
CVE-2023-52561В ядре Linux устранена следующая уязвимость:
arm64: dts: qcom: sdm845-db845c: пометить cont splash memory region как зарезервированную.
Добавление зарезервированной области памяти для памяти кадрового буфера
(область splash memory, настроенная загрузчиком).
Это исправляет kernel panic (arm-smmu: необработанная ошибка контекста
в этой конкретной области памяти), о которой сообщалось на DB845c, работающем под
v5.10.y.