Отслеживает ли valgrind инициализацию памяти через драйверы? - PullRequest
4 голосов
/ 13 июля 2010

valgrind сообщает об ошибках неинициализированной памяти из кода, подобного следующему:

unsigned char buf[100];
struct driver_command cmd;
cmd.len = sizeof(buf);
cmd.buf = buf;
ioctl(my_driver_fd, READ, &cmd);

for(i = 0; i < sizeof(buf); i++)
{
    foo(buf[i]); /* <<--- uninit use error from valgrind */
}

Если я memset () buf до вызова драйвера, ошибка исчезнет.драйвер linux правильно пишет в буфер?(Я посмотрел на код драйвера, и он кажется правильным, но, возможно, я что-то упустил.)

Или он просто пропускает вызов драйвера и не может знать, что буфер былнаписано внутри ядра?

Спасибо.

1 Ответ

7 голосов
/ 13 июля 2010

Valgrind, очевидно, не может отследить выполнение в ядре, но он знает видимую семантику большинства системных вызовов. Но ioctl слишком непредсказуемо. Если бы вы закодировали свой драйвер так, чтобы это был звонок read, он бы все понял правильно. В любом случае, это лучше практиковать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...