Open
Description
Hello,
I'm trying my query on a simple code before moving to my main codebase. Basically, I would like to track all the local taints from all the function arguments to the LocalVariables in that function. This is the simplest version but eventually I want to find all such taints that are coming from an assignment in a loop.
Here's my simple C code:
#include <stdlib.h>
#include <stdio.h>
void call1(char* in) {
char buff[10];
char a;
a = in[3];
for (int i = 0; i < 10; i++) {
buff[i] = in[i];
}
printf("%s\n", buff);
}
int main() {
char *input = "Hello!!!!";
call1(input);
return 0;
}
Here's my simple CodeQL query:
from DataFlow::Node source, DataFlow::Node sink, LocalVariable lv, Function f
where
f.getAParameter() = source.asParameter() and
lv.getAnAccess() = sink.asExpr() and
lv.getFunction() = f and
TaintTracking::localTaint(source, sink)
select source, sink
I want to find the following taints:
in -> buff, in -> a
For now the query returns nothing. But if I comment the TaintTracking::localTaint(source, sink)
line it would return the following:
Result set: edges
| a | b |
+---+---+
Result set: nodes
| n | key | val |
+---+-----+-----+
Result set: subpaths
| arg | par | ret | out |
+-----+-----+-----+-----+
Result set: #select
| source | sink |
+--------+------+
| in | a |
| in | i |
| in | i |
| in | buff |
| in | i |
| in | i |
| in | buff |
I'm not really sure why this happens and if I should probably define an additional taint step. I'd appreciate any help.