-
Notifications
You must be signed in to change notification settings - Fork 34
Open
Description
I have the same targets to verify where there is only the difference in a variable name (owner_map
in the below). While they contain the exact same code logic and there is no place where the modified variable is used, the verification results are different for some reasons. I think that this is the bug in uclid
, but I am not sure what is the root cause of this bug.
$ git diff expected unexpected
diff --git a/TrustedAbstractPlatform/standard/modules/see-cpu.ucl b/TrustedAbstractPlatform/standard/modules/see-cpu.ucl
index a26af0e..8d737f6 100644
--- a/TrustedAbstractPlatform/standard/modules/see-cpu.ucl
+++ b/TrustedAbstractPlatform/standard/modules/see-cpu.ucl
@@ -9,7 +9,7 @@ var enclave_id : tap_enclave_id_t;
var regs : regs_t;
var pc : linear_addr_t;
var addr_valid : linear_addr_valid_t;
-var owner_map : linear_owner_map_t;
+var owner_map_test : linear_owner_map_t; // XXX: this is the only line modified from the `expected` branch
Different results
[expected results]
smt/ctap-assertion-_____modules_tap-mod_ucl__line_1708-verif_measurement_proof_2:_verify_measurement_proof_part2-0004.smt unknown ----------
smt/ctap-assertion-_____modules_tap-mod_ucl__line_1708-verif_measurement_proof_2:_verify_measurement_proof_part2-0056.smt unknown ----------
[unexpected results]
smt/ctap-assertion-_____modules_tap-mod_ucl__line_1708-verif_measurement_proof_2:_verify_measurement_proof_part2-0004.smt verified.
smt/ctap-assertion-_____modules_tap-mod_ucl__line_1708-verif_measurement_proof_2:_verify_measurement_proof_part2-0011.smt verified.
As there is an explicit false assertion inserted, the expected results
are correct.
$ sed -n 1707,1708p trusted-abstract-platform/TrustedAbstractPlatform/standard/modules/tap-mod.ucl
call simple_test();
assert false;
However, in the unexpected results, this false assertion is bypassed for some reasons.
Before the false assertion, the child module (see
)'s one variable is simply modified.
$ sed -n 566,571p trusted-abstract-platform/TrustedAbstractPlatform/standard/modules/tap-mod.ucl
procedure [noinline] simple_test()
ensures (see.enclave_id != old(see.enclave_id));
modifies see;
{
call see.havoc_enclave_id();
}
$ sed -n 15,23p trusted-abstract-platform/TrustedAbstractPlatform/standard/modules/see-cpu.ucl
procedure [noinline] havoc_enclave_id()
ensures (enclave_id != old(enclave_id));
modifies enclave_id;
{
var new_enclave_id : tap_enclave_id_t;
havoc new_enclave_id;
assume (new_enclave_id != enclave_id);
enclave_id = new_enclave_id;
}
How to reproduce?
In the following two branches, expected-branch and unexpected-branch,
cd trusted-abstract-platform/TrustedAbstractPlatform/standard/proofs
$ make measurement-proof-printed
$ run_all_smt.sh
Metadata
Metadata
Assignees
Labels
No labels