3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-22 21:22:37 +01:00

dpp-util: check return of l_ecc_scalar_get_data

Static analysis was not happy since this return can be negative and
it was being fed into an unsigned argument. In reality this cannot
happen since the key buffer is always set to the maximum size supported
by any curves.
This commit is contained in:
James Prestwood 2021-12-10 08:48:39 -08:00 committed by Denis Kenzior
parent 0822b942af
commit d65aaf8740

View File

@ -283,16 +283,20 @@ struct l_ecc_scalar *dpp_derive_k1(const struct l_ecc_point *i_proto_public,
return NULL; return NULL;
key_len = l_ecc_scalar_get_data(m, mx_bytes, sizeof(mx_bytes)); key_len = l_ecc_scalar_get_data(m, mx_bytes, sizeof(mx_bytes));
if (key_len < 0)
goto free_m;
sha = dpp_sha_from_key_len(key_len); sha = dpp_sha_from_key_len(key_len);
if (!dpp_hkdf(sha, NULL, key_len, "first intermediate key", mx_bytes, if (!dpp_hkdf(sha, NULL, key_len, "first intermediate key", mx_bytes,
key_len, k1, key_len)) { key_len, k1, key_len))
l_ecc_scalar_free(m); goto free_m;
return NULL;
}
return m; return m;
free_m:
l_ecc_scalar_free(m);
return NULL;
} }
/* /*
@ -312,16 +316,20 @@ struct l_ecc_scalar *dpp_derive_k2(const struct l_ecc_point *i_proto_public,
return NULL; return NULL;
key_len = l_ecc_scalar_get_data(n, nx_bytes, sizeof(nx_bytes)); key_len = l_ecc_scalar_get_data(n, nx_bytes, sizeof(nx_bytes));
if (key_len < 0)
goto free_n;
sha = dpp_sha_from_key_len(key_len); sha = dpp_sha_from_key_len(key_len);
if (!dpp_hkdf(sha, NULL, key_len, "second intermediate key", nx_bytes, if (!dpp_hkdf(sha, NULL, key_len, "second intermediate key", nx_bytes,
key_len, k2, key_len)) { key_len, k2, key_len))
l_ecc_scalar_free(n); goto free_n;
return NULL;
}
return n; return n;
free_n:
l_ecc_scalar_free(n);
return NULL;
} }
bool dpp_derive_ke(const uint8_t *i_nonce, const uint8_t *r_nonce, bool dpp_derive_ke(const uint8_t *i_nonce, const uint8_t *r_nonce,