Skip to content

Commit 8d60e82

Browse files
committed
Merge branch 'main' into modelnoise
2 parents 372ba5c + 7e108a8 commit 8d60e82

File tree

14 files changed

+361
-12
lines changed

14 files changed

+361
-12
lines changed

rust/ql/lib/codeql/rust/Concepts.qll

+52
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,58 @@ class ModeledEnvironmentSource extends EnvironmentSource::Range {
102102
ModeledEnvironmentSource() { sourceNode(this, "environment-source") }
103103
}
104104

105+
/**
106+
* A data flow source corresponding to a file access.
107+
*/
108+
final class FileSource = FileSource::Range;
109+
110+
/**
111+
* An externally modeled source for data from a file access.
112+
*/
113+
class ModeledFileSource extends FileSource::Range {
114+
ModeledFileSource() { sourceNode(this, "file") }
115+
}
116+
117+
/**
118+
* Provides a class for modeling new sources for file accesses.
119+
*/
120+
module FileSource {
121+
/**
122+
* A data flow source corresponding to a file access.
123+
*/
124+
abstract class Range extends ThreatModelSource::Range {
125+
override string getThreatModel() { result = "file" }
126+
127+
override string getSourceType() { result = "FileSource" }
128+
}
129+
}
130+
131+
/**
132+
* A data flow source corresponding to standard input.
133+
*/
134+
final class StdInSource = StdInSource::Range;
135+
136+
/**
137+
* An externally modeled source for data from standard input.
138+
*/
139+
class ModeledStdInSourceSource extends StdInSource::Range {
140+
ModeledStdInSourceSource() { sourceNode(this, "stdin") }
141+
}
142+
143+
/**
144+
* Provides a class for modeling new sources for standard input.
145+
*/
146+
module StdInSource {
147+
/**
148+
* A data flow source corresponding to standard input.
149+
*/
150+
abstract class Range extends ThreatModelSource::Range {
151+
override string getThreatModel() { result = "stdin" }
152+
153+
override string getSourceType() { result = "StdInSource" }
154+
}
155+
}
156+
105157
/**
106158
* A data flow source corresponding to the program's database reads.
107159
*/

rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml

+8-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ extensions:
22
- addsTo:
33
pack: codeql/rust-all
44
extensible: sourceModel
5-
data: []
5+
data:
6+
- ["lang:std", "crate::fs::read", "ReturnValue.Field[crate::result::Result::Ok(0)]", "file", "manual"]
7+
- ["lang:std", "crate::fs::read_to_string", "ReturnValue.Field[crate::result::Result::Ok(0)]", "file", "manual"]
8+
- ["lang:std", "crate::fs::read_link", "ReturnValue.Field[crate::result::Result::Ok(0)]", "file", "manual"]
9+
- ["lang:std", "<crate::fs::DirEntry>::path", "ReturnValue", "file", "manual"]
10+
- ["lang:std", "<crate::fs::DirEntry>::file_name", "ReturnValue", "file", "manual"]
11+
- ["lang:std", "<crate::fs::File>::open", "ReturnValue.Field[crate::result::Result::Ok(0)]", "file", "manual"]
12+
- ["lang:std", "<crate::fs::File>::open_buffered", "ReturnValue.Field[crate::result::Result::Ok(0)]", "file", "manual"]
613
- addsTo:
714
pack: codeql/rust-all
815
extensible: sinkModel
@@ -34,7 +41,6 @@ extensions:
3441
- ["lang:std", "<crate::fs::File>::create_new", "Argument[0]", "path-injection", "manual"]
3542
- ["lang:std", "<crate::fs::File>::open", "Argument[0]", "path-injection", "manual"]
3643
- ["lang:std", "<crate::fs::File>::open_buffered", "Argument[0]", "path-injection", "manual"]
37-
3844
- addsTo:
3945
pack: codeql/rust-all
4046
extensible: summaryModel
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/rust-all
4+
extensible: sourceModel
5+
data:
6+
- ["lang:std", "crate::io::stdio::stdin", "ReturnValue", "stdin", "manual"]
7+
- addsTo:
8+
pack: codeql/rust-all
9+
extensible: summaryModel
10+
data:
11+
- ["lang:std", "<crate::io::buffered::bufreader::BufReader>::new", "Argument[0]", "ReturnValue", "taint", "manual"]
12+
- ["lang:std", "<crate::io::buffered::bufreader::BufReader as crate::io::BufRead>::fill_buf", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "taint", "manual"]
13+
- ["lang:std", "<crate::io::buffered::bufreader::BufReader>::buffer", "Argument[self]", "ReturnValue", "taint", "manual"]
14+
- ["lang:std", "<crate::io::stdio::Stdin as crate::io::Read>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
15+
- ["lang:std", "<crate::io::stdio::StdinLock as crate::io::Read>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
16+
- ["lang:std", "<crate::fs::File as crate::io::Read>::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
17+
- ["lang:std", "crate::io::Read::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
18+
- ["lang:std", "<crate::io::stdio::Stdin as crate::io::Read>::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
19+
- ["lang:std", "<crate::io::stdio::StdinLock as crate::io::Read>::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
20+
- ["lang:std", "<crate::fs::File as crate::io::Read>::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
21+
- ["lang:std", "crate::io::Read::read_to_string", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
22+
- ["lang:std", ":<crate::io::stdio::Stdin as crate::io::Read>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
23+
- ["lang:std", ":<crate::io::stdio::StdinLock as crate::io::Read>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
24+
- ["lang:std", "<crate::fs::File as crate::io::Read>::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
25+
- ["lang:std", "crate::io::Read::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
26+
- ["lang:std", "<crate::io::stdio::Stdin as crate::io::Read>::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
27+
- ["lang:std", "<crate::io::stdio::StdinLock as crate::io::Read>::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
28+
- ["lang:std", "<crate::fs::File as crate::io::Read>::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
29+
- ["lang:std", "crate::io::Read::read_exact", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
30+
- ["lang:std", "crate::io::BufRead::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"]
31+
- ["lang:std", "crate::io::BufRead::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"]
32+
- ["lang:std", "crate::io::BufRead::split", "Argument[self]", "ReturnValue", "taint", "manual"]
33+
- ["lang:std", "crate::io::BufRead::lines", "Argument[self]", "ReturnValue", "taint", "manual"]
34+
- ["lang:std", "crate::io::Read::bytes", "Argument[self]", "ReturnValue", "taint", "manual"]
35+
- ["lang:std", "crate::io::Read::chain", "Argument[self]", "ReturnValue", "taint", "manual"]
36+
- ["lang:std", "crate::io::Read::chain", "Argument[0]", "ReturnValue", "taint", "manual"]
37+
- ["lang:std", "crate::io::Read::take", "Argument[self]", "ReturnValue", "taint", "manual"]
38+
- ["lang:std", "<crate::io::stdio::Stdin>::lock", "Argument[self]", "ReturnValue", "taint", "manual"]

rust/ql/lib/codeql/rust/frameworks/stdlib/lang-alloc.model.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ extensions:
3232
# Fmt
3333
- ["lang:alloc", "crate::fmt::format", "Argument[0]", "ReturnValue", "taint", "manual"]
3434
# String
35-
- ["lang:alloc", "<crate::string::String>::as_str", "Argument[self]", "ReturnValue", "taint", "manual"]
36-
- ["lang:alloc", "<crate::string::String>::as_bytes", "Argument[self]", "ReturnValue", "taint", "manual"]
35+
- ["lang:alloc", "<crate::string::String>::as_str", "Argument[self]", "ReturnValue", "value", "manual"]
36+
- ["lang:alloc", "<crate::string::String>::as_bytes", "Argument[self]", "ReturnValue", "value", "manual"]
3737
- ["lang:alloc", "<_ as crate::string::ToString>::to_string", "Argument[self]", "ReturnValue", "taint", "manual"]
38+
- ["lang:alloc", "<crate::string::String>::parse", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "taint", "manual"]
39+
- ["lang:alloc", "<crate::string::String>::trim", "Argument[self]", "ReturnValue.Reference", "taint", "manual"]

rust/ql/lib/codeql/rust/frameworks/stdlib/lang-core.model.yml

+4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ extensions:
4040
- ["lang:core", "crate::ptr::write_unaligned", "Argument[1]", "Argument[0].Reference", "value", "manual"]
4141
- ["lang:core", "crate::ptr::write_volatile", "Argument[1]", "Argument[0].Reference", "value", "manual"]
4242
# Str
43+
- ["lang:core", "<str>::as_str", "Argument[self]", "ReturnValue", "taint", "value"]
44+
- ["lang:core", "<str>::as_bytes", "Argument[self]", "ReturnValue", "taint", "value"]
45+
- ["lang:core", "<str>::to_string", "Argument[self]", "ReturnValue", "taint", "manual"]
4346
- ["lang:core", "<str>::parse", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "taint", "manual"]
47+
- ["lang:core", "<str>::trim", "Argument[self]", "ReturnValue.Reference", "taint", "manual"]
4448
- addsTo:
4549
pack: codeql/rust-all
4650
extensible: sourceModel

0 commit comments

Comments
 (0)