Привет, я в настоящее время исправляю свои ошибки valgrind, и они:

==11925== ERROR SUMMARY: 9 errors from 1 contexts (suppressed: 0 from 0)
==11925== 
==11925== 9 errors in context 1 of 1:
==11925== Syscall param ioctl(generic) points to uninitialised byte(s)
==11925==    at 0xF8B7F47: ioctl (syscall-template.S:84)
==11925==    by 0x1F770DAD: drmIoctl (in /opt/amdgpu/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==11925==    by 0x1F7756E8: drmCommandWriteRead (in /opt/amdgpu/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==11925==    by 0x3332C6AC: amdgpu_create_bo_from_user_mem (in /opt/amdgpu/lib/x86_64-linux-gnu/libdrm_amdgpu.so.1.0.0)
==11925==    by 0x32A479F2: ??? (in /usr/lib/x86_64-linux-gnu/gallium-pipe/pipe_radeonsi.so)
==11925==    by 0x32A6E6B3: ??? (in /usr/lib/x86_64-linux-gnu/gallium-pipe/pipe_radeonsi.so)
==11925==    by 0x2D8E8BD6: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==    by 0x2D8E05D4: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==    by 0x2D8DE2D4: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==    by 0x2D8DD2E7: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==    by 0x2D8DD940: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==    by 0x2D8D8875: ??? (in /usr/lib/x86_64-linux-gnu/libMesaOpenCL.so.1.0.0)
==11925==  Address 0xffeffed64 is on thread 1's stack
==11925==  in frame #3, created by amdgpu_create_bo_from_user_mem (???:)
==11925==  Uninitialised value was created by a stack allocation
==11925==    at 0x329770B0: ??? (in /usr/lib/x86_64-linux-gnu/gallium-pipe/pipe_radeonsi.so)

В моей программе я не имею ничего общего с файлами, указанными в коде ошибки. Я прочитал много сообщений об этой проблеме, но в моем случае указанная строка кода даже не в моем коде (я полагаю, что она есть в какой-то библиотеке, которую я использую).

Я ценю любую помощь!

2
Tuấn Phạm 17 Июн 2018 в 22:29

1 ответ

Лучший ответ

Довольно часто в ioctl передается неинициализированный буфер.

В valgrind есть даже возможность игнорировать их:

--sim-hints=lax-ioctls

См. Документ http://valgrind.org/docs/manual/manual-core.html

lax-ioctls: будьте очень осторожны с обработкой ioctl; единственное предположение, что размер правильный. Не требует инициализации полного буфера при записи. Без этого использование некоторых драйверов устройств с большим количеством странных команд ioctl становится очень утомительным.

Короче говоря, ваша ошибка (очень вероятно) является ложным срабатыванием.

4
Michael Doubez 17 Июн 2018 в 20:09