valgrind是否通过驱动程序跟踪内存初始化?

时间:2010-07-12 23:54:42

标签: c linux driver valgrind initialization

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,则错误消失。

valgrind可以检测linux驱动程序是否正确写入缓冲区? (我查看了驱动程序代码,它似乎是正确的,但也许我错过了一些东西。)

或者只是通过驱动程序调用并且无法知道缓冲区是否已写入内核?

感谢。

1 个答案:

答案 0 :(得分:7)

Valgrind显然无法跟踪执行内核,但它确实知道大多数系统调用的可见语义。但ioctl太不可预测了。如果您已将驱动程序编码为read调用,那么它就会正确。无论如何,这是更好的做法。