【发布时间】:2010-07-12 23:54:41
【问题描述】:
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 驱动程序是否正确写入缓冲区? (我查看了驱动代码,似乎是正确的,但也许我遗漏了什么。)
或者它只是通过驱动程序调用而无法知道缓冲区已写入内核中?
谢谢。
【问题讨论】:
-
除非 ioctl 没有 memset(或类似的)valgrind 在这里正确报告。
-
@ezpz:驱动程序应该将 100 个字节写入 buf ...... ioctl 是一种尴尬的 read() 方式。 (此处未发布更多设置。)
-
啊,我第一次错过了
READ。
标签: c linux driver valgrind initialization