我是一名 Cppcheck 开发人员。
确实,kmalloc 等有旧的内置处理。一个好的开始是使用内置知识检查内核。不需要 cfg 文件。
但是,使用 cfg 文件可以增强 cppcheck。
这是一个开始:
<?xml version="1.0"?>
<def format="1">
<memory>
<dealloc>kfree</dealloc>
<alloc init="false">kmalloc</alloc>
<alloc init="true">kzalloc</alloc>
</memory>
</def>
将该文本保存在名称为 kernel.cfg 的文件中,然后使用例如 --library=kernel 在 cppcheck 分析期间使用该信息。
在这个 cfg 中有很多缺失的信息。如果您使用 --check-cfg ,当 Cppcheck 在分析过程中感到困惑并想要更多 cfg-info 时,它会抱怨。它主要需要关于函数的 noreturn 信息,以及函数是否“泄漏忽略”。
您可以查看我们的官方 std.cfg 文件,例如查看 strcmp() 的配置。此配置明确表示 strcmp() 不是 noreturn。该配置还具有“泄漏忽略”属性 - 因为如果您可以将指向已分配内存的指针传递给 strcmp() 则泄漏检查器应该忽略这一点,因为 strcmp() 不会导致任何释放等。
如果您对它的工作原理有任何疑问,请告诉我们。