c - memcheck 错误是否可以接受?

标签 c valgrind undefined-behavior memcheck

valgrind quickstart page提到:

Try to make your program so clean that Memcheck reports no errors. Once you achieve this state, it is much easier to see when changes to the program cause Memcheck to report new errors. Experience from several years of Memcheck use shows that it is possible to make even huge programs run Memcheck-clean. For example, large parts of KDE, OpenOffice.org and Firefox are Memcheck-clean, or very close to it.


这个块让我有点困惑。看到 C 标准的工作方式,我会假设产生 memcheck 错误的大多数(如果不是全部)实践会在程序上调用未定义的行为,因此应该像瘟疫一样避免。
然而,引用块中的最后一句话暗示实际上有“著名”程序在生产中运行时出现了 memcheck 错误。读完这篇之后,我想我应该把它测试一下,我尝试用 valgrind 运行 VLC,在启动后立即得到一堆 memcheck 错误。
这让我想到了这个问题:是否有充分的理由不从生产中的程序中消除此类错误?发布包含此类错误的程序是否有任何好处,如果是,开发人员如何确保其安全,尽管据我所知,包含此类错误的程序可能会出现不可预测的行为并且没有办法对其一般行为做出假设?如果是这样,您能否提供一些实际案例,说明程序在运行这些错误时比没有运行时更好?

最佳答案

有一种情况,修复 Valgrind 报告的错误实际上会导致安全漏洞,例如参见https://research.swtch.com/openssl .使用未初始化内存的意图是通过具有一些随机字节来增加熵,该修复导致更可预测的随机数,实际上削弱了安全性。
如果是 VLC,请随时进行调查 ;-)

关于c - memcheck 错误是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67664865/

相关文章:

c - 为什么 strcmp 不能与 Process32NextW 一起使用?

c - 写入标准输出和文件

c - 从简单的浮点计算中得到错误的输出

c - 尝试添加到链表时使用 Valgrind 无限循环 "Signal 11 being dropped"

c - C 中的未定义行为

关于 C 中的短数据类型格式说明符的困惑

这段代码崩溃了

c - postgresql 的 Valgrind 错误

linux - 如何更新make 3.81 linux

c++ - 通过间接使指针集无效