Description
Hi, when using LockBud to detect ConflictLock vulnerabilities, I found that it generates some duplicate warnings. Please see the code example and the analysis results below. I used the command cargo lockbud -k all to invoke LockBud.
Code Example
use std::sync::{Arc, Mutex};
use std::thread;
macro_rules! lock_and_execute {
($a:expr, $b:expr, $body:block) => {
let _a = $a.lock().unwrap();
let _b = $b.lock().unwrap();
$body
};
}
fn func() {
let lock_a1 = Arc::new(Mutex::new(1));
let lock_b1 = Arc::new(Mutex::new(true));
let lock_a2 = lock_a1.clone();
let lock_b2 = lock_b1.clone();
lock_and_execute!(lock_b1, lock_a1, {});
let th = thread::spawn(move || {
lock_and_execute!(lock_a2, lock_b2, {});
});
th.join().unwrap();
}
fn main() {
func();
}
Expected Behavior
Lockbud should issue only one ConflictLockwarning for the locks at lines 15 and 17, but it reported multiple identical warnings.
Part of Analysis Results
ConflictLock warning 1
"first_lock_type": "StdMutex(i32)",
"first_lock_span": "src/main.rs:6:13: 6:15 (#8)",
"second_lock_type": "StdMutex(bool)",
"second_lock_span": "src/main.rs:6:13: 6:15 (#30)",
"first_lock_type": "StdMutex(bool)",
"first_lock_span": "src/main.rs:5:13: 5:15 (#8)",
"second_lock_type": "StdMutex(i32)",
"second_lock_span": "src/main.rs:5:13: 5:15 (#30)",
ConflictLock warning 2
"first_lock_type": "StdMutex(i32)",
"first_lock_span": "src/main.rs:6:13: 6:15 (#8)",
"second_lock_type": "StdMutex(bool)",
"second_lock_span": "src/main.rs:6:13: 6:15 (#30)",
"first_lock_type": "StdMutex(bool)",
"first_lock_span": "src/main.rs:5:13: 5:15 (#8)",
"second_lock_type": "StdMutex(i32)",
"second_lock_span": "src/main.rs:6:13: 6:15 (#8)",
ConflictLock warning 3
"first_lock_type": "StdMutex(i32)",
"first_lock_span": "src/main.rs:5:13: 5:15 (#30)",
"second_lock_type": "StdMutex(bool)",
"second_lock_span": "src/main.rs:6:13: 6:15 (#30)",
"first_lock_type": "StdMutex(bool)",
"first_lock_span": "src/main.rs:5:13: 5:15 (#8)",
"second_lock_type": "StdMutex(i32)",
"second_lock_span": "src/main.rs:6:13: 6:15 (#8)",
Description
Hi, when using LockBud to detect
ConflictLockvulnerabilities, I found that it generates some duplicate warnings. Please see the code example and the analysis results below. I used the commandcargo lockbud -k allto invoke LockBud.Code Example
Expected Behavior
Lockbud should issue only one ConflictLockwarning for the locks at lines 15 and 17, but it reported multiple identical warnings.
Part of Analysis Results
ConflictLock warning 1
ConflictLock warning 2
ConflictLock warning 3