我试图在我从 LGTM (GNU coreutils) 下载的代码存储库中全局跟踪污点,但 CodeQL 似乎也认为对 libc 的调用是“污点”,而它们实际上并没有引入任何污点。考虑以下示例:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
int bytes = fread(some_array, sizeof(*some_array), sizeof(some_array), some_fptr);
如果some_array
或被some_fptr
污染,现在 CodeQL 也会认为字节被污染。我怀疑这是为了安全起见(而不是高估污染而不是低估)。
编辑:显然,默认情况下,外部调用被认为不会引入污点,但对于 libc 等常见 API,模型是根据文档制作关于污点跟踪的。然而,在这种情况下,它似乎有点错误,但它们正在不断发展。
我将如何在 CodeQL 保留的源数据库中包含 glibc 源,以便查询可以更准确地确定这些“闭源”函数调用中的污点?
如果代码依赖于其他一些预编译库怎么办,我如何使 CodeQL 可以使用它的源代码?