cryptodev: fix supported size check
Crypto capability structure contains supported sizes for key, IV, digest, etc. on different algorithms. These sizes can be expressed as a single value or a range of values. The check was broken when a size was checked against a range with multiple values. Also, for more clarity, the param_range_check macro has been converted into a function. Fixes: 38227c0e3ad2 ("cryptodev: retrieve device info") Cc: stable@dpdk.org Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> Acked-by: Fiona Trahe <fiona.trahe@intel.com>
This commit is contained in:
parent
5fa2a3089b
commit
23f0db51ad
@ -262,19 +262,40 @@ rte_cryptodev_sym_capability_get(uint8_t dev_id,
|
||||
|
||||
}
|
||||
|
||||
#define param_range_check(x, y) \
|
||||
(((x < y.min) || (x > y.max)) || \
|
||||
(y.increment != 0 && (x % y.increment) != 0))
|
||||
static int
|
||||
param_range_check(uint16_t size, const struct rte_crypto_param_range *range)
|
||||
{
|
||||
unsigned int next_size;
|
||||
|
||||
/* Check lower/upper bounds */
|
||||
if (size < range->min)
|
||||
return -1;
|
||||
|
||||
if (size > range->max)
|
||||
return -1;
|
||||
|
||||
/* If range is actually only one value, size is correct */
|
||||
if (range->increment == 0)
|
||||
return 0;
|
||||
|
||||
/* Check if value is one of the supported sizes */
|
||||
for (next_size = range->min; next_size <= range->max;
|
||||
next_size += range->increment)
|
||||
if (size == next_size)
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
rte_cryptodev_sym_capability_check_cipher(
|
||||
const struct rte_cryptodev_symmetric_capability *capability,
|
||||
uint16_t key_size, uint16_t iv_size)
|
||||
{
|
||||
if (param_range_check(key_size, capability->cipher.key_size))
|
||||
if (param_range_check(key_size, &capability->cipher.key_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(iv_size, capability->cipher.iv_size))
|
||||
if (param_range_check(iv_size, &capability->cipher.iv_size) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
@ -285,13 +306,13 @@ rte_cryptodev_sym_capability_check_auth(
|
||||
const struct rte_cryptodev_symmetric_capability *capability,
|
||||
uint16_t key_size, uint16_t digest_size, uint16_t iv_size)
|
||||
{
|
||||
if (param_range_check(key_size, capability->auth.key_size))
|
||||
if (param_range_check(key_size, &capability->auth.key_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(digest_size, capability->auth.digest_size))
|
||||
if (param_range_check(digest_size, &capability->auth.digest_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(iv_size, capability->auth.iv_size))
|
||||
if (param_range_check(iv_size, &capability->auth.iv_size) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
@ -303,16 +324,16 @@ rte_cryptodev_sym_capability_check_aead(
|
||||
uint16_t key_size, uint16_t digest_size, uint16_t aad_size,
|
||||
uint16_t iv_size)
|
||||
{
|
||||
if (param_range_check(key_size, capability->aead.key_size))
|
||||
if (param_range_check(key_size, &capability->aead.key_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(digest_size, capability->aead.digest_size))
|
||||
if (param_range_check(digest_size, &capability->aead.digest_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(aad_size, capability->aead.aad_size))
|
||||
if (param_range_check(aad_size, &capability->aead.aad_size) != 0)
|
||||
return -1;
|
||||
|
||||
if (param_range_check(iv_size, capability->aead.iv_size))
|
||||
if (param_range_check(iv_size, &capability->aead.iv_size) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user