Commit 80667b7b authored by Brenden Blanco's avatar Brenden Blanco

Fix unary operator handling of probe reads with parens

Testing for bpf_probe_read should not include parenethes when walking
the tree, since the inner operation will have already been rewritten.

Fixes: #289
Signed-off-by: default avatarBrenden Blanco <bblanco@plumgrid.com>
parent 66a33c88
......@@ -109,6 +109,9 @@ class ProbeChecker : public RecursiveASTVisitor<ProbeChecker> {
needs_probe_ = false;
return false;
}
bool VisitParenExpr(ParenExpr *E) {
return false;
}
bool VisitDeclRefExpr(DeclRefExpr *E) {
if (ptregs_.find(E->getDecl()) != ptregs_.end())
needs_probe_ = true;
......
......@@ -249,5 +249,19 @@ int kprobe____kmalloc(struct pt_regs *ctx, size_t size) {
return 0;
}""", debug=4)
def test_unop_probe_read(self):
text = """
#include <linux/blkdev.h>
int trace_entry(struct pt_regs *ctx, struct request *req) {
if (!(req->bio->bi_rw & 1))
return 1;
if (((req->bio->bi_rw)))
return 1;
return 0;
}
"""
b = BPF(text=text)
fn = b.load_func("trace_entry", BPF.KPROBE)
if __name__ == "__main__":
main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment