Skip to content

Commit e4cadf0

Browse files
committed
Rust: Don't report excessive results for the same source.
1 parent b7044bd commit e4cadf0

File tree

3 files changed

+7
-8
lines changed

3 files changed

+7
-8
lines changed

rust/ql/src/queries/security/CWE-825/AccessInvalidPointer.ql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ module AccessInvalidPointerConfig implements DataFlow::ConfigSig {
2626
predicate isSink(DataFlow::Node node) { node instanceof AccessInvalidPointer::Sink }
2727

2828
predicate isBarrier(DataFlow::Node barrier) { barrier instanceof AccessInvalidPointer::Barrier }
29+
30+
predicate isBarrierOut(DataFlow::Node node) {
31+
// make sinks barriers so that we only report the closest instance
32+
isSink(node)
33+
}
2934
}
3035

3136
module AccessInvalidPointerFlow = DataFlow::Global<AccessInvalidPointerConfig>;

rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#select
22
| deallocation.rs:26:15:26:16 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:26:15:26:16 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
3-
| deallocation.rs:32:16:32:17 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:32:16:32:17 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
4-
| deallocation.rs:33:16:33:17 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:33:16:33:17 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
53
| deallocation.rs:37:14:37:33 | ...::read::<...> | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:37:14:37:33 | ...::read::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
64
| deallocation.rs:44:6:44:7 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:44:6:44:7 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
75
| deallocation.rs:49:5:49:25 | ...::write::<...> | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:49:5:49:25 | ...::write::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid |
@@ -18,8 +16,6 @@
1816
| deallocation.rs:214:18:214:20 | ptr | deallocation.rs:208:27:208:29 | ptr | deallocation.rs:214:18:214:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:208:27:208:29 | ptr | invalid |
1917
edges
2018
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:26:15:26:16 | m1 | provenance | |
21-
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:32:16:32:17 | m1 | provenance | |
22-
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:33:16:33:17 | m1 | provenance | |
2319
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:37:35:37:36 | m1 | provenance | |
2420
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:44:6:44:7 | m1 | provenance | |
2521
| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:49:27:49:28 | m1 | provenance | |
@@ -52,8 +48,6 @@ models
5248
nodes
5349
| deallocation.rs:20:23:20:24 | m1 | semmle.label | m1 |
5450
| deallocation.rs:26:15:26:16 | m1 | semmle.label | m1 |
55-
| deallocation.rs:32:16:32:17 | m1 | semmle.label | m1 |
56-
| deallocation.rs:33:16:33:17 | m1 | semmle.label | m1 |
5751
| deallocation.rs:37:14:37:33 | ...::read::<...> | semmle.label | ...::read::<...> |
5852
| deallocation.rs:37:35:37:36 | m1 | semmle.label | m1 |
5953
| deallocation.rs:44:6:44:7 | m1 | semmle.label | m1 |

rust/ql/test/query-tests/security/CWE-825/deallocation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ pub fn test_alloc(mode: i32) {
2929
println!(" v6 = {v6} (!)"); // corrupt in practice
3030

3131
// test repeat reads (we don't want lots of very similar results for the same dealloc)
32-
let v5b = *m1; // $ Alert[rust/access-invalid-pointer]=dealloc
33-
let v5c = *m1; // $ Alert[rust/access-invalid-pointer]=dealloc
32+
let v5b = *m1;
33+
let v5c = *m1;
3434
},
3535
100 => {
3636
// more reads

0 commit comments

Comments
 (0)