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

标签 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 驱动程序是否正确写入缓冲区? (我查看了驱动程序代码,它似乎是正确的,但也许我遗漏了什么。)

还是它只是通过了驱动程序调用而无法知道缓冲区已写入内核?

谢谢。

最佳答案

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

关于c - valgrind 是否通过驱动程序跟踪内存初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233174/

相关文章:

c - Timing Quake III hack 仅在优化编译时有效

使用 NMake : Not producing a static library 在 Windows 中编译 libssh2

linux - 使用单独文件中的 sed

c++ - 如何隐藏类中的寄存器地址

android - android "nexus 7"2013 的哪个版本的 adb 接口(interface)

java - Android things : 1. 0.0 问题 : Superclass com. google.android.things.pio.GpioCallback com.google.android.things.contrib.driver.button

c - C 中的指针与数组

c - POSIX sigevent 未使用 c11 进行编译

linux - 每周 Cron 作业

python - 从作为守护进程运行的 python 脚本中解压缩文件时出错