tf_fuzz: Minor improvements/fixes in TF-Fuzz
Problems corrected related to failing to deallocate resources
created over the course of a test, and to incorrect accounting for
variables when using statement-level randomization (i.e., the <n>
to <m> of {} and shuffle options). Also removed several inter-
mediate files that should not have commited in the first place.
Change-Id: I0582cbfddb70563a071fee0cb9aaf2547876d051
diff --git a/tf_fuzz/calls/crypto_call.cpp b/tf_fuzz/calls/crypto_call.cpp
index 85d7ac0..7dc1c8e 100644
--- a/tf_fuzz/calls/crypto_call.cpp
+++ b/tf_fuzz/calls/crypto_call.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2019-2022, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
@@ -1110,59 +1110,20 @@
void copy_key_call::fill_in_command (void)
{
- vector<psa_asset*>::iterator key_asset;
- vector<psa_asset*> *asset_vector;
- int asset_pick;
+ // (call_code already loaded by constructor)
+ find_replace_all ("$master", policy.asset_3_name, call_code);
+ find_replace_all ("$policy", policy.asset_2_name, call_code);
+ find_replace_all ("$copy", asset_info.get_name(), call_code);
// Calculate the expected results:
asset_search find_result;
vector<psa_asset*>::iterator asset;
long dummy = 0L;
// See if the source key does not exist:
-
- if (random_asset != psa_asset_usage::all) {
- // != psa_asset_usage::all means to choose some known asset at random:
- if (random_asset == psa_asset_usage::active) {
- asset_vector = &(test_state->active_key_asset);
- find_result = asset_info.how_asset_found = asset_search::found_active;
- // if empty, we'll error out, below.
- } else if (random_asset == psa_asset_usage::deleted) {
- asset_vector = &(test_state->deleted_key_asset);
- find_result = asset_info.how_asset_found = asset_search::found_deleted;
- } else {
- // "invalid" assets are not currently used.
- cerr << "\nError: Tool-internal: Please report error 1103 to " << endl
- << "TF-Fuzz developers."
- << endl;
- exit(1103);
- }
- if (asset_vector->size() > 0) {
- /* Pick an active or deleted asset at random: */
- asset_pick = rand() % asset_vector->size();
- key_asset = asset_vector->begin() + asset_pick;
- /* Copy asset information into template tracker: */
- asset_info.id_n = (*key_asset)->asset_info.id_n;
- asset_info.asset_ser_no
- = (*key_asset)->asset_info.asset_ser_no;
- } else {
- if (random_asset == psa_asset_usage::active) {
- cerr << "\nError: A key call asks for a "
- << "randomly chosen active asset, when none " << endl
- << "is currently defined." << endl;
- exit(1012);
- } else if (random_asset == psa_asset_usage::deleted) {
- cerr << "\nError: A key call asks for a "
- << "randomly chosen deleted asset, when none " << endl
- << "is currently defined." << endl;
- exit(1013);
- } // "invalid" assets are not currently used.
- }
- } else {
- find_result = test_state->
- find_or_create_key_asset (psa_asset_search::name, psa_asset_usage::active,
- policy.asset_3_name, (uint64_t) 0, dummy,
- dont_create_asset, key_asset);
- }
+ find_result = test_state->
+ find_or_create_key_asset (psa_asset_search::name, psa_asset_usage::active,
+ policy.asset_3_name, (uint64_t) 0, dummy,
+ dont_create_asset, asset);
if (find_result != asset_search::found_active) {
exp_data.pf_specified = true;
exp_data.pf_result_string = "PSA_ERROR_INVALID_ARGUMENT";
@@ -1184,11 +1145,6 @@
exp_data.pf_result_string = "PSA_ERROR_NOT_PERMITTED";
}
}
-
- // (call_code already loaded by constructor)
- find_replace_all ("$master", (*key_asset)->asset_info.get_name(), call_code);
- find_replace_all ("$policy", policy.asset_2_name, call_code);
- find_replace_all ("$copy", asset_info.get_name(), call_code);
calc_result_code();
}
@@ -1249,10 +1205,13 @@
find_replace_1st ("$var", length_var_name, prep_code);
find_replace_1st ("$init", to_string(temp_string.length()), prep_code);
// TODO: Is these lengths in bits or bytes?
+ // Actual (output) data length:
+ actual_length_var_name.assign (exp_data.data_var + "_act_length");
+ prep_code.append (test_state->bplate->bplate_string[declare_size_t]);
+ find_replace_1st ("$var", actual_length_var_name, prep_code);
+ find_replace_1st ("$init", to_string(temp_string.length()), prep_code);
}
}
- // else we're not comparing to named variable, so compare to assigned data.
- // Actual (output) data length:
if (assign_data_var_specified) {
var_name.assign (assign_data_var + "_data");
length_var_name.assign (assign_data_var + "_length");
@@ -1272,58 +1231,66 @@
prep_code.append (test_state->bplate->bplate_string[declare_size_t]);
find_replace_1st ("$var", length_var_name, prep_code);
find_replace_1st ("$init", to_string(temp_string.length()), prep_code);
+ // Actual (output) data length:
+ prep_code.append (test_state->bplate->bplate_string[declare_size_t]);
+ find_replace_1st ("$var", actual_length_var_name, prep_code);
+ find_replace_1st ("$init", to_string(temp_string.length()), prep_code);
}
} else {
- // Key data not read into a named variable, so use default C variable:
- var_name = asset_info.get_name() + "_act_data";
+ // Single string of two lines declaring string data and its length:
+ var_name_suffix = "_set_data";
+ length_var_name_suffix = "_set_length";
+ if (set_data.n_set_vars > 0) {
+ var_name_suffix += "_" + to_string(set_data.n_set_vars);
+ length_var_name_suffix += "_" + to_string(set_data.n_set_vars);
+ }
+ var_name.assign (asset_info.get_name() + var_name_suffix);
+ length_var_name.assign (asset_info.get_name() + length_var_name_suffix);
prep_code.append (test_state->bplate->bplate_string[declare_string]);
find_replace_1st ("$var", var_name, prep_code);
find_replace_1st ("$init", set_data.get(), prep_code);
- actual_length_var_name.assign (asset_info.get_name() + "_act_length");
- prep_code.append (test_state->bplate->bplate_string[declare_size_t]);
- find_replace_1st ("$var", actual_length_var_name, prep_code);
+ temp_string.assign (test_state->bplate->bplate_string[declare_int]);
+ find_replace_1st ("static int", "static uint32_t", temp_string);
+ prep_code.append (temp_string);
+ find_replace_1st ("$var", length_var_name, prep_code);
find_replace_1st ("$init", to_string(set_data.get().length()), prep_code);
}
- length_var_name_suffix = "_read_length";
- var_name.assign (asset_info.get_name() + var_name_suffix);
- length_var_name.assign (asset_info.get_name() + length_var_name_suffix);
- prep_code.append (test_state->bplate->bplate_string[declare_size_t]);
- find_replace_1st ("$var", length_var_name, prep_code);
- find_replace_1st ("$init", to_string(set_data.get().length()), prep_code);
}
void read_key_data_call::fill_in_command (void)
{
- string var_name, length_var_name, exp_var_name, exp_length_var_name,
- actual_length_var_name, var_name_suffix, length_var_name_suffix,
- temp_string;
+ string var_name, length_var_name, actual_length_var_name, var_name_suffix,
+ length_var_name_suffix, temp_string;
// Fill in the PSA command itself:
- actual_length_var_name.assign (asset_info.get_name() + "_read_length");
+ if (exp_data.data_var_specified) {
+ var_name.assign (exp_data.data_var + "_data");
+ actual_length_var_name.assign (exp_data.data_var + "_act_length");
+ } else {
+ actual_length_var_name.assign (assign_data_var + "_act_length");
+ }
if (assign_data_var_specified) {
var_name.assign (assign_data_var + "_data");
length_var_name.assign (assign_data_var + "_length");
} else {
- var_name_suffix = "_act_data";
+ var_name_suffix = "_set_data";
+ if (set_data.n_set_vars > 0) {
+ var_name_suffix += "_" + to_string(set_data.n_set_vars);
+ }
var_name.assign (asset_info.get_name() + var_name_suffix);
- length_var_name_suffix = "_act_length";
+ length_var_name_suffix = "_set_length";
+ if (set_data.n_set_vars > 0) {
+ length_var_name_suffix += "_" + to_string(set_data.n_set_vars);
+ }
length_var_name.assign (asset_info.get_name() + length_var_name_suffix);
}
find_replace_1st ("$data", var_name, call_code);
find_replace_1st ("$key", asset_info.get_name(), call_code);
string id_string = to_string((long) asset_info.id_n++);
- find_replace_1st ("$length", length_var_name, call_code);
find_replace_1st ("$act_size", actual_length_var_name, call_code);
+ find_replace_1st ("$length", length_var_name, call_code);
- // Check data:
- if (exp_data.data_var_specified) {
- check_code.assign (test_state->bplate->bplate_string[compare_data]);
- exp_var_name.assign (exp_data.data_var + "_data");
- exp_length_var_name.assign (exp_data.data_var + "_length");
- find_replace_1st ("$act_data", var_name, check_code);
- find_replace_1st ("$exp_data", exp_var_name, check_code);
- find_replace_1st ("$length", exp_length_var_name, check_code);
- }
+ // TODO: check data?
// See if the source key did not exist:
if (!policy.exportable) {