[EXT] [PATCH v2] cryptodev: avoid algorithm strings null pointers

Akhil Goyal gakhil at marvell.com
Fri Jun 9 08:46:48 CEST 2023


> Subject: [EXT] [PATCH v2] cryptodev: avoid algorithm strings null pointers
> 
> The crypto algorithm strings identifiers that are Continuous may be null,
> so there is needed to add null judgment.
> When testing with dpdk-test-crypto-perf and passing in the parameter
> --auth-algo sm3-hmac, The program caused a segfault due to a null pointer
> passed in by strcmp.
> Adding this patch can solve the segfault problem.

I believe this is a fix and you should add fixes tag for this and need to be backported.

> 
> Signed-off-by: xixin.liu <liuxixin2020 at outlook.com>

Signoff format is not correct.
Please follow https://doc.dpdk.org/guides/contributing/patches.html


> ---
>  lib/cryptodev/rte_cryptodev.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
> index a96114b2da..41c23fc596 100644
> --- a/lib/cryptodev/rte_cryptodev.c
> +++ b/lib/cryptodev/rte_cryptodev.c
> @@ -346,6 +346,8 @@ rte_cryptodev_get_cipher_algo_enum(enum
> rte_crypto_cipher_algorithm *algo_enum,
>  	int ret = -1;	/* Invalid string */
> 
>  	for (i = 1; i < RTE_DIM(crypto_cipher_algorithm_strings); i++) {
> +		if (crypto_cipher_algorithm_strings[i] == NULL)
> +			continue;

crypto_cipher_algorithm_strings is a fixed size array with all non-NULL known values
and the for loop is iterating over it. So, this check does not make sense to me.


>  		if (strcmp(algo_string, crypto_cipher_algorithm_strings[i]) == 0)
> {
>  			*algo_enum = (enum rte_crypto_cipher_algorithm) i;
>  			ret = 0;
> @@ -366,6 +368,8 @@ rte_cryptodev_get_auth_algo_enum(enum
> rte_crypto_auth_algorithm *algo_enum,
>  	int ret = -1;	/* Invalid string */
> 
>  	for (i = 1; i < RTE_DIM(crypto_auth_algorithm_strings); i++) {
> +		if (crypto_auth_algorithm_strings[i] == NULL)
> +			continue;
>  		if (strcmp(algo_string, crypto_auth_algorithm_strings[i]) == 0) {
>  			*algo_enum = (enum rte_crypto_auth_algorithm) i;
>  			ret = 0;
> @@ -386,6 +390,8 @@ rte_cryptodev_get_aead_algo_enum(enum
> rte_crypto_aead_algorithm *algo_enum,
>  	int ret = -1;	/* Invalid string */
> 
>  	for (i = 1; i < RTE_DIM(crypto_aead_algorithm_strings); i++) {
> +		if (crypto_aead_algorithm_strings[i] == NULL)
> +			continue;
>  		if (strcmp(algo_string, crypto_aead_algorithm_strings[i]) == 0) {
>  			*algo_enum = (enum rte_crypto_aead_algorithm) i;
>  			ret = 0;
> @@ -406,6 +412,8 @@ rte_cryptodev_asym_get_xform_enum(enum
> rte_crypto_asym_xform_type *xform_enum,
>  	int ret = -1;	/* Invalid string */
> 
>  	for (i = 1; i < RTE_DIM(crypto_asym_xform_strings); i++) {
> +		if (crypto_asym_xform_strings[i] == NULL)
> +			continue;
>  		if (strcmp(xform_string,
>  			crypto_asym_xform_strings[i]) == 0) {
>  			*xform_enum = (enum rte_crypto_asym_xform_type) i;
> --
> 2.34.1



More information about the dev mailing list