diff options
author | Rob Austein <sra@hactrn.net> | 2016-11-01 17:36:58 -0400 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-11-01 17:36:58 -0400 |
commit | e391580e079af9506764d2efd5b9ab868e59f33d (patch) | |
tree | 3d2d5c74eede5a5210a4ba27d307b2bcbd2af4ee | |
parent | e2793cfe01ca0ff16ecf8c211106526b13268976 (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.c | 7 | ||||
-rw-r--r-- | ks_volatile.c | 7 |
2 files changed, 4 insertions, 10 deletions
@@ -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, |