fill_memory_blocks() cannot possibly fail

This commit is contained in:
Frank Denis
2017-07-28 18:07:45 +02:00
parent c3908f87d6
commit fb739acd7b
6 changed files with 27 additions and 36 deletions
@@ -155,9 +155,15 @@ static void
clear_memory(argon2_instance_t *instance, int clear)
{
/* LCOV_EXCL_START */
if (instance->region != NULL && clear) {
sodium_memzero(instance->region->memory,
sizeof(block) * instance->memory_blocks);
if (clear) {
if (instance->region != NULL) {
sodium_memzero(instance->region->memory,
sizeof(block) * instance->memory_blocks);
}
if (instance->pseudo_rands != NULL) {
sodium_memzero(instance->region->memory,
sizeof(uint64_t) * instance->segment_length);
}
}
/* LCOV_EXCL_STOP */
}
@@ -301,14 +307,14 @@ index_alpha(const argon2_instance_t *instance,
return absolute_position;
}
int
void
fill_memory_blocks(argon2_instance_t *instance)
{
int result;
uint32_t r, s;
if (instance == NULL || instance->lanes == 0) {
return ARGON2_OK; /* LCOV_EXCL_LINE */
return; /* LCOV_EXCL_LINE */
}
for (r = 0; r < instance->passes; ++r) {
@@ -322,14 +328,10 @@ fill_memory_blocks(argon2_instance_t *instance)
position.lane = l;
position.slice = (uint8_t) s;
position.index = 0;
result = fill_segment(instance, position);
if (ARGON2_OK != result) {
return result; /* LCOV_EXCL_LINE */
}
fill_segment(instance, position);
}
}
}
return ARGON2_OK;
}
int
@@ -188,15 +188,15 @@ void finalize(const argon2_context *context, argon2_instance_t *instance);
* @param position Current position
* @pre all block pointers must be valid
*/
typedef int (*fill_segment_fn)(const argon2_instance_t *instance,
argon2_position_t position);
typedef void (*fill_segment_fn)(const argon2_instance_t *instance,
argon2_position_t position);
int argon2_pick_best_implementation(void);
int fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position);
int fill_segment_ssse3(const argon2_instance_t *instance,
void fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position);
int fill_segment_ref(const argon2_instance_t *instance,
argon2_position_t position);
void fill_segment_ssse3(const argon2_instance_t *instance,
argon2_position_t position);
void fill_segment_ref(const argon2_instance_t *instance,
argon2_position_t position);
/*
* Function that fills the entire memory t_cost times based on the first two
@@ -204,6 +204,6 @@ int fill_segment_ref(const argon2_instance_t *instance,
* @param instance Pointer to the current instance
* @return Zero if successful, -1 if memory failed to allocate
*/
int fill_memory_blocks(argon2_instance_t *instance);
void fill_memory_blocks(argon2_instance_t *instance);
#endif
@@ -140,7 +140,7 @@ generate_addresses(const argon2_instance_t *instance,
}
}
int
void
fill_segment_avx2(const argon2_instance_t *instance,
argon2_position_t position)
{
@@ -155,7 +155,7 @@ fill_segment_avx2(const argon2_instance_t *instance,
uint64_t *pseudo_rands = NULL;
if (instance == NULL) {
return ARGON2_OK;
return;
}
if (instance->type == Argon2_id &&
@@ -235,7 +235,5 @@ fill_segment_avx2(const argon2_instance_t *instance,
(uint8_t *) curr_block->v);
}
}
return ARGON2_OK;
}
#endif
@@ -140,7 +140,7 @@ generate_addresses(const argon2_instance_t *instance,
}
}
int
void
fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
{
block *ref_block = NULL, *curr_block = NULL;
@@ -153,7 +153,7 @@ fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
int data_independent_addressing = 1;
if (instance == NULL) {
return ARGON2_OK;
return;
}
if (instance->type == Argon2_id &&
@@ -230,6 +230,4 @@ fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
curr_block);
}
}
return ARGON2_OK;
}
@@ -139,7 +139,7 @@ generate_addresses(const argon2_instance_t *instance,
}
}
int
void
fill_segment_ssse3(const argon2_instance_t *instance,
argon2_position_t position)
{
@@ -154,7 +154,7 @@ fill_segment_ssse3(const argon2_instance_t *instance,
uint64_t *pseudo_rands = NULL;
if (instance == NULL) {
return ARGON2_OK;
return;
}
if (instance->type == Argon2_id &&
@@ -234,7 +234,5 @@ fill_segment_ssse3(const argon2_instance_t *instance,
(uint8_t *) curr_block->v);
}
}
return ARGON2_OK;
}
#endif
+1 -6
View File
@@ -70,12 +70,7 @@ argon2_ctx(argon2_context *context, argon2_type type)
}
/* 4. Filling memory */
result = fill_memory_blocks(&instance);
if (ARGON2_OK != result) {
free_instance(&instance, context->flags);
return result;
}
fill_memory_blocks(&instance);
/* 5. Finalization */
finalize(context, &instance);