> 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 <liuxixin2...@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.
----> Not every element of the array is defined, eg. it is NULL that the first 
element [1],  if not check "strcmp(algo_string, 
crypto_cipher_algorithm_strings[i]" will fail

>               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

Reply via email to