Пожалуйста, предоставьте максимально подробную информацию; в противном случае недостаток необходимых данных может помешать локализации дефекта
OS версия | Linux (none) 6.6.0 #16:[DB SIG] Introduce Bigdata DB solution liked softwares into openEuler SMP Tue Jan 14 10:40:22 CST 2025 aarch64 GNU/Linux |
---|---|
Ядро версия | Несколько версий, включая linux-master |
Хардварь платформа | Не применимо |
Сетевое соединение | Не применимо |
Шаг воспроизведения проблемы |
---|
1. В dma_alloc_coherent передается 0 как длина |
--- |
Ожидаемый возврат NULL |
Ожидаемый результат |
Происходит Oops, что приводит к панике ядра |
Другие связанные приложения и данные |
[2860.573350][T400] Невозможно обработать ошибку ядра с нулевым указателем виртуального адреса 0000000000000010
[2860.573367][T400] Информация о прерывании памяти:
[2860.573379][T400] ESR = 0x0000000096000006
[2860.573392][T400] EC = 0x25: DABT (текущий EL), IL = 32 бита
[2860.573407][T400] SET = 0, FnV = 0
[2860.573420][T400] EA = 0, S1PTW = 0
[2860.573434][T400] FSC = 0x06: уровень 2 ошибки трансляции
[2860.573448][T400] Информация о данных при ошибке:
[2860.573460][T400] ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
[2860.573475][T400] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[2860.573491][T400] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[2860.573506][T400] таблица pgtable пользователя: страницы размером 4КБ, 48-битные ВА, pgdp=000008009c237000
[2860.573523][T400] [0000000000000010] pgd=080008009c250403, p4d=080008009c250403, pud=080008009c22c403, pmd=0000000000000000
[2860.573664][T400] pc : sg_alloc_append_table_from_pages+0x208/0x430
[2860.573680][T400] lr : sg_alloc_append_table_from_pages+0x2c8/0x430
[2860.573695][T400] sp : ffff800081a0b770
[2860.573704][T400] x29: ffff800081a0b770 x28: 0000000000000001 x27: 0000000000000000
[2860.573724][T400] x26: 0000000000000000 x25: 0000000000000001 x24: 0000000000000000
[2860.573744][T400] x23: 0000000000000000 x22: ffff080097664b20 x21: 00000000fffff000
[2860.573764][T400] x20: 0000000000000000 x19: 0000000000000010 x18: 0000000000000000
[2860.573784][T400] x17: 0000000000000000 x16: ffffd7c64b5a7e38 x15: 0000fffff7ccae20
[2860.573805][T400] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000
[2860.573824][T400] x11: 0000000000000000 x10: 0000000000000000 x9 : ffffd7c64b83a574
[2860.573845][T400] x8 : ffff080097664b40 x7 : 0000000000000000 x6 : 000000000000cbe5
[2860.573866][T400] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
[2860.573886][T400] x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000000573865][ T400] x5 : ffffd7c64d18a8f0 x4 : 0000000000000000 x3 : 0000000000000001
[ 2860. 573885][ T400] x2 : 0000000000000000 x1 : 0000000000000002 x0 : 0000000000000001
[ 2860. 573905][ T400] Отладочный трассировщик вызовов:
[ 2860. 573912][ T400] sg_alloc_append_table_from_pages+0x208/0x430
[ 2860. 573927][ T400] sg_alloc_table_from_pages_segment+0x3c/0xa0
[ 2860. 573943][ T400] __iommu_dma_alloc_noncontiguous.constprop.0+0x130/0x278
[ 2860. 573960][ T400] iommu_dma_alloc+0x174/0x228
[ 2860. 573973][ T400] dma_alloc_attrs+0xf4/0x108
[ Анализ завершен ] Если анализ и локализация уже выполнены, пожалуйста, приложите подробные результаты анализа.По трассе вызовов удалось локализовать функцию __iommu_dma_alloc_noncontiguous
, внутри которой происходит вызов функции __iommu_dma_alloc_pages
. Длина передается от пользователя и может быть равной нулю; когда размер равен нулю, параметр count
в функции __iommu_dma_alloc_pages
также становится равным нулю:
Функция использует kvcalloc
для выделения памяти, а kvcalloc
является обёрткой над kmalloc
. Когда count
равно нулю, фактически вызывается kmalloc(0, gfp)
, что возвращает ZERO_SIZE_PTR
(это (void*)16
вместо 0
).
Проверка !pages
проваливается, так как последующее использование pages
приводит к попытке деконструирования ZERO_SIZE_PTR
, что вызывает Oops
.

Вход Перед тем как оставить комментарий