github / github/codeql

CPP: Flow Into Barrier Guards

未关闭
#10,011 15 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
question
主要语言
CodeQL
星标
10.1k
派生
2.1k
平均合并
2 天 15 小时
30 天内合并 PR
141

描述

I'm looking for general assistance on how to properly use codeql with barrier guards when the guard condition may not be computed in the guard itself, but instead also data traces into a guard:

Consider these two cases, where `use(x)` is a sink, but if it is guarded by `MyGuard(x)` it is considered safe. The first case is the easy case where BarrierGuard (or SanitizerGuard) can be used fairly easily, and the latter case seems to require yet another dataflow:

```
//Easy case
if(MyGuard(x))
use(x);

//harder case
res = MyGuard(x)
if(res)
use(x);
```

For the latter/harder case, what is the CodeQL paradigm to associate the guard to `x` such that I know use(x) is safe? Seems to me, out of the box, there is no flow from `x` to res. I could add an additional step, in a dataflow/taint analysis, but that would still not let me define barrier guard check conditions to associate that value with the originating variable. Perhaps there is a way to pass around misc. metadata too that will feed into a BarrierGuard check in these cases?

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。