Skip to content

Commit 4e496fe

Browse files
committed
Rust: Lets just not model 'drop' incorrectly, for now.
1 parent 8598d61 commit 4e496fe

File tree

4 files changed

+6
-5
lines changed

4 files changed

+6
-5
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ extensions:
3030
pack: codeql/rust-all
3131
extensible: sourceModel
3232
data:
33-
# Mem
34-
- ["lang:core", "crate::mem::drop", "Argument[0]", "pointer-invalidate", "manual"]
3533
# Ptr
3634
- ["lang:core", "crate::ptr::drop_in_place", "Argument[0]", "pointer-invalidate", "manual"]
3735
- ["lang:core", "crate::ptr::dangling", "ReturnValue", "pointer-invalidate", "manual"]

rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ module AccessInvalidPointer {
3636

3737
/**
3838
* A pointer invalidation from model data.
39+
*
40+
* Note: we don't currently support invalidation via the object itself rather than via a pointer, such as:
41+
* ```
42+
* drop(obj)
43+
* ```
3944
*/
4045
private class ModelsAsDataSource extends Source {
4146
ModelsAsDataSource() { sourceNode(this, "pointer-invalidate") }

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
| deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:42 | ...::dangling_mut | invalid |
1414
| deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:36 | ...::null | invalid |
1515
| deallocation.rs:180:15:180:16 | p1 | deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:180:15:180:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:176:3:176:25 | ...::drop_in_place | invalid |
16-
| deallocation.rs:212:10:212:17 | self.ptr | deallocation.rs:212:10:212:17 | self.ptr | deallocation.rs:212:10:212:17 | self.ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:212:10:212:17 | self.ptr | invalid |
1716
| deallocation.rs:245:18:245:20 | ptr | deallocation.rs:239:3:239:25 | ...::drop_in_place | deallocation.rs:245:18:245:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:239:3:239:25 | ...::drop_in_place | invalid |
1817
edges
1918
| deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 |
@@ -84,7 +83,6 @@ nodes
8483
| deallocation.rs:176:3:176:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
8584
| deallocation.rs:176:27:176:28 | [post] p1 | semmle.label | [post] p1 |
8685
| deallocation.rs:180:15:180:16 | p1 | semmle.label | p1 |
87-
| deallocation.rs:212:10:212:17 | self.ptr | semmle.label | self.ptr |
8886
| deallocation.rs:239:3:239:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
8987
| deallocation.rs:239:27:239:29 | [post] ptr | semmle.label | [post] ptr |
9088
| deallocation.rs:245:18:245:20 | ptr | semmle.label | ptr |

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ impl Drop for MyDropBuffer {
209209

210210
unsafe {
211211
_ = *self.ptr;
212-
drop(*self.ptr); // $ MISSING: Source=drop SPURIOUS: Alert[rust/access-invalid-pointer]=drop
212+
drop(*self.ptr); // $ MISSING: Source=drop
213213
_ = *self.ptr; // $ MISSING: Alert[rust/access-invalid-pointer]=drop
214214
std::alloc::dealloc(self.ptr, layout);
215215
}

0 commit comments

Comments
 (0)