aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2016-11-01 17:36:58 -0400
committerRob Austein <sra@hactrn.net>2016-11-01 17:36:58 -0400
commite391580e079af9506764d2efd5b9ab868e59f33d (patch)
tree3d2d5c74eede5a5210a4ba27d307b2bcbd2af4ee
parente2793cfe01ca0ff16ecf8c211106526b13268976 (diff)
Fix hal_rpc_pkey_match() calling convention.
Old calling sequence didn't quite work, caller had no sane way to know how large the buffer needed to be. Revised sequence is similar to what the PKCS #11 C_FindObject() call does: return the next batch of UUIDs, up to the number specified, end of data indicated by getting back something less than a full block of UUIDs.
-rw-r--r--ks_flash.c7
-rw-r--r--ks_volatile.c7
2 files changed, 4 insertions, 10 deletions
diff --git a/ks_flash.c b/ks_flash.c
index e4d82ff..952253e 100644
--- a/ks_flash.c
+++ b/ks_flash.c
@@ -1183,10 +1183,7 @@ static hal_error_t ks_match(hal_ks_t *ks,
else if (err != HAL_OK)
return err;
- while (*result_len < result_max) {
-
- if (++i >= db.ksi.used)
- return HAL_OK;
+ while (*result_len < result_max && ++i < db.ksi.used) {
unsigned b = db.ksi.index[i];
@@ -1251,7 +1248,7 @@ static hal_error_t ks_match(hal_ks_t *ks,
possible = 0;
}
- return HAL_ERROR_RESULT_TOO_LONG;
+ return HAL_OK;
}
static hal_error_t ks_set_attribute(hal_ks_t *ks,
diff --git a/ks_volatile.c b/ks_volatile.c
index 2e6ea3e..c416263 100644
--- a/ks_volatile.c
+++ b/ks_volatile.c
@@ -414,10 +414,7 @@ static hal_error_t ks_match(hal_ks_t *ks,
else if (err != HAL_OK)
return err;
- while (*result_len < result_max) {
-
- if (++i >= ksv->db->ksi.used)
- return HAL_OK;
+ while (*result_len < result_max && ++i < ksv->db->ksi.used) {
unsigned b = ksv->db->ksi.index[i];
@@ -466,7 +463,7 @@ static hal_error_t ks_match(hal_ks_t *ks,
++*result_len;
}
- return HAL_ERROR_RESULT_TOO_LONG;
+ return HAL_OK;
}
static hal_error_t ks_set_attribute(hal_ks_t *ks,