DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ibtisam Tariq <ibtisam.tariq@emumba.com>
To: David Marchand <david.marchand@redhat.com>
Cc: "Kovacevic, Marko" <marko.kovacevic@intel.com>,
	 "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	"Pattan, Reshma" <reshma.pattan@intel.com>,
	 "Mcnamara, John" <john.mcnamara@intel.com>,
	 Cristian Dumitrescu <cristian.dumitrescu@intel.com>,
	 "Singh, Jasvinder" <jasvinder.singh@intel.com>,
	"Xia, Chenbo" <chenbo.xia@intel.com>,
	 Maxime Coquelin <maxime.coquelin@redhat.com>,
	Xiaoyun Li <xiaoyun.li@intel.com>, dev <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 1/8] examples/fips_validation: enhance getopt_long usage
Date: Wed, 4 Nov 2020 15:00:00 +0500	[thread overview]
Message-ID: <CA+8bGBsfVCO-qrBOjZYa8Ze+Aap3duDoLibkf6BNWu3RW4_wYw@mail.gmail.com> (raw)
In-Reply-To: <CA+8bGBvR_LB+4FJs+BqS+R+ZsBe=UuTW=y7gOLQWLb9UeYngMg@mail.gmail.com>

Hello David,

In reference to this comment
> +               case MBUF_DATAROOM_KEYWORD_NUM:
> +               {
> +                       uint32_t data_room_size;

Here, I don't think we need a temp storage.
If the value is invalid, the parsing and then init will fail.
You can directly pass &env.mbuf_data_room to parser_read_uint32 and
check its value.



>
> -                               env.mbuf_data_room = data_room_size;
> -                       } else {
> +                       if (parser_read_uint32(&data_room_size,
> +                                       optarg) < 0) {
>                                 cryptodev_fips_validate_usage(prgname);
>                                 return -EINVAL;
>                         }
> +
> +                       if (data_room_size == 0 ||
> +                                       data_room_size > UINT16_MAX) {
> +                               cryptodev_fips_validate_usage(prgname);
> +                               return -EINVAL;
> +                       }
> +
> +                       env.mbuf_data_room = data_room_size;
> +
>                         break;
> +               }

The type of env.mbuf_data_room is uint16_t and the temp variable type
is uint32_t. In my opinion, the temp variable size is bigger than
env.mbuf_data_room to handle overflow value.

-- 
- Ibtisam

On Mon, Nov 2, 2020 at 1:32 PM Ibtisam Tariq <ibtisam.tariq@emumba.com> wrote:
>
> Hi David,
>
> Thank you for reviewing the patch. I will submit the v2 of the patchset with new updates.
>
> On Fri, Oct 30, 2020 at 3:07 AM David Marchand <david.marchand@redhat.com> wrote:
>>
>> Hello Ibtisam,
>>
>> On Thu, Oct 29, 2020 at 1:55 PM Ibtisam Tariq <ibtisam.tariq@emumba.com> wrote:
>> >
>> > Instead of using getopt_long return value, strcmp was used to
>> > compare the input parameters with the struct option array. This
>> > patch get rid of all those strcmp by directly binding each longopt
>> > with an int enum.
>> >
>> > Bugzilla ID: 238
>> > Fixes: 3d0fad56b74 ("examples/fips_validation: add crypto FIPS application"}
>>
>> I consider this bz as an enhancement, for better readability /
>> consistency in the project code.
>> This is not a bugfix, and I would not flag the patches with a Fixes: tag.
>>
>>
>> > Cc: marko.kovacevic@intel.com
>> >
>> > Reported-by: David Marchand <david.marchand@redhat.com>
>> > Signed-off-by: Ibtisam Tariq <ibtisam.tariq@emumba.com>
>> > ---
>> >  examples/fips_validation/main.c | 241 +++++++++++++++++++-------------
>> >  1 file changed, 143 insertions(+), 98 deletions(-)
>> >
>> > diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c
>> > index 07532c956..5fb76b421 100644
>> > --- a/examples/fips_validation/main.c
>> > +++ b/examples/fips_validation/main.c
>> > @@ -15,17 +15,31 @@
>> >  #include "fips_validation.h"
>> >  #include "fips_dev_self_test.h"
>> >
>> > +enum{
>>
>> Missing space.
>>
>>
>> The _KEYWORD suffix gives no info and can be dropped in all those
>> defines / enums.
>>
>> >  #define REQ_FILE_PATH_KEYWORD  "req-file"
>> > +       /* first long only option value must be >= 256, so that we won't
>> > +        * conflict with short options
>> > +        */
>>
>> This comment is copied from the EAL header, but there is no mapping to
>> a short option in this example.
>> You can drop it.
>>
>> > +       REQ_FILE_PATH_KEYWORD_NUM = 256,
>> >  #define RSP_FILE_PATH_KEYWORD  "rsp-file"
>> > +       RSP_FILE_PATH_KEYWORD_NUM,
>> >  #define MBUF_DATAROOM_KEYWORD  "mbuf-dataroom"
>> > +       MBUF_DATAROOM_KEYWORD_NUM,
>> >  #define FOLDER_KEYWORD         "path-is-folder"
>> > +       FOLDER_KEYWORD_NUM,
>> >  #define CRYPTODEV_KEYWORD      "cryptodev"
>> > +       CRYPTODEV_KEYWORD_NUM,
>> >  #define CRYPTODEV_ID_KEYWORD   "cryptodev-id"
>> > +       CRYPTODEV_ID_KEYWORD_NUM,
>> >  #define CRYPTODEV_ST_KEYWORD   "self-test"
>> > +       CRYPTODEV_ST_KEYWORD_NUM,
>> >  #define CRYPTODEV_BK_ID_KEYWORD        "broken-test-id"
>> > +       CRYPTODEV_BK_ID_KEYWORD_NUM,
>> >  #define CRYPTODEV_BK_DIR_KEY   "broken-test-dir"
>> > +       CRYPTODEV_BK_DIR_KEY_NUM,
>>
>>
>> Those next two defines have nothing to do with getopt options and they
>> are only used once.
>> You can directly replace them as their fixed string later in the
>> parsing code, and drop the defines.
>>
>>
>> >  #define CRYPTODEV_ENC_KEYWORD  "enc"
>> >  #define CRYPTODEV_DEC_KEYWORD  "dec"
>> > +};
>> >
>> >  struct fips_test_vector vec;
>> >  struct fips_test_interim_info info;
>> > @@ -226,15 +240,24 @@ cryptodev_fips_validate_parse_args(int argc, char **argv)
>> >         char **argvopt;
>> >         int option_index;
>> >         struct option lgopts[] = {
>> > -                       {REQ_FILE_PATH_KEYWORD, required_argument, 0, 0},
>> > -                       {RSP_FILE_PATH_KEYWORD, required_argument, 0, 0},
>> > -                       {FOLDER_KEYWORD, no_argument, 0, 0},
>> > -                       {MBUF_DATAROOM_KEYWORD, required_argument, 0, 0},
>> > -                       {CRYPTODEV_KEYWORD, required_argument, 0, 0},
>> > -                       {CRYPTODEV_ID_KEYWORD, required_argument, 0, 0},
>> > -                       {CRYPTODEV_ST_KEYWORD, no_argument, 0, 0},
>> > -                       {CRYPTODEV_BK_ID_KEYWORD, required_argument, 0, 0},
>> > -                       {CRYPTODEV_BK_DIR_KEY, required_argument, 0, 0},
>>
>> Single indent is enough.
>>
>>
>> > +                       {REQ_FILE_PATH_KEYWORD, required_argument,
>> > +                                       NULL, REQ_FILE_PATH_KEYWORD_NUM},
>> > +                       {RSP_FILE_PATH_KEYWORD, required_argument,
>> > +                                       NULL, RSP_FILE_PATH_KEYWORD_NUM},
>> > +                       {FOLDER_KEYWORD, no_argument,
>> > +                                       NULL, FOLDER_KEYWORD_NUM},
>> > +                       {MBUF_DATAROOM_KEYWORD, required_argument,
>> > +                                       NULL, MBUF_DATAROOM_KEYWORD_NUM},
>> > +                       {CRYPTODEV_KEYWORD, required_argument,
>> > +                                       NULL, CRYPTODEV_KEYWORD_NUM},
>> > +                       {CRYPTODEV_ID_KEYWORD, required_argument,
>> > +                                       NULL, CRYPTODEV_ID_KEYWORD_NUM},
>> > +                       {CRYPTODEV_ST_KEYWORD, no_argument,
>> > +                                       NULL, CRYPTODEV_ST_KEYWORD_NUM},
>> > +                       {CRYPTODEV_BK_ID_KEYWORD, required_argument,
>> > +                                       NULL, CRYPTODEV_BK_ID_KEYWORD_NUM},
>> > +                       {CRYPTODEV_BK_DIR_KEY, required_argument,
>> > +                                       NULL, CRYPTODEV_BK_DIR_KEY_NUM},
>> >                         {NULL, 0, 0, 0}
>> >         };
>> >
>> > @@ -251,105 +274,127 @@ cryptodev_fips_validate_parse_args(int argc, char **argv)
>> >         while ((opt = getopt_long(argc, argvopt, "s:",
>> >                                   lgopts, &option_index)) != EOF) {
>> >
>> > +               if (opt == '?') {
>> > +                       cryptodev_fips_validate_usage(prgname);
>> > +                       return -1;
>> > +               }
>> > +
>> >                 switch (opt) {
>> > -               case 0:
>> > -                       if (strcmp(lgopts[option_index].name,
>> > -                                       REQ_FILE_PATH_KEYWORD) == 0)
>> > -                               env.req_path = optarg;
>> > -                       else if (strcmp(lgopts[option_index].name,
>> > -                                       RSP_FILE_PATH_KEYWORD) == 0)
>> > -                               env.rsp_path = optarg;
>> > -                       else if (strcmp(lgopts[option_index].name,
>> > -                                       FOLDER_KEYWORD) == 0)
>> > -                               env.is_path_folder = 1;
>> > -                       else if (strcmp(lgopts[option_index].name,
>> > -                                       CRYPTODEV_KEYWORD) == 0) {
>> > -                               ret = parse_cryptodev_arg(optarg);
>> > -                               if (ret < 0) {
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > -                       } else if (strcmp(lgopts[option_index].name,
>> > -                                       CRYPTODEV_ID_KEYWORD) == 0) {
>> > -                               ret = parse_cryptodev_id_arg(optarg);
>> > -                               if (ret < 0) {
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > -                       } else if (strcmp(lgopts[option_index].name,
>> > -                                       CRYPTODEV_ST_KEYWORD) == 0) {
>> > -                               env.self_test = 1;
>> > -                       } else if (strcmp(lgopts[option_index].name,
>> > -                                       CRYPTODEV_BK_ID_KEYWORD) == 0) {
>> > -                               if (!env.broken_test_config) {
>> > -                                       env.broken_test_config = rte_malloc(
>> > -                                               NULL,
>> > -                                               sizeof(*env.broken_test_config),
>> > -                                               0);
>> > -                                       if (!env.broken_test_config)
>> > -                                               return -ENOMEM;
>> > -
>> > -                                       env.broken_test_config->expect_fail_dir =
>> > -                                               self_test_dir_enc_auth_gen;
>> > -                               }
>> > +               case REQ_FILE_PATH_KEYWORD_NUM:
>> > +               {
>>
>> Unless you need a temp variable, there is no need for a block for each
>> case: statement.
>> Simply:
>>     case REQ_FILE_PATH_NUM:
>>         env.req_path = optarg;
>>         break;
>>
>> > +                       env.req_path = optarg;
>> > +                       break;
>> > +               }
>> > +               case RSP_FILE_PATH_KEYWORD_NUM:
>> > +               {
>> > +                       env.rsp_path = optarg;
>> > +                       break;
>> > +               }
>> > +               case FOLDER_KEYWORD_NUM:
>> > +               {
>> > +                       env.is_path_folder = 1;
>> > +                       break;
>> > +               }
>> > +               case CRYPTODEV_KEYWORD_NUM:
>> > +               {
>> > +                       ret = parse_cryptodev_arg(optarg);
>> > +                       if (ret < 0) {
>> > +                               cryptodev_fips_validate_usage(prgname);
>> > +                               return -EINVAL;
>> > +                       }
>> >
>> > -                               if (parser_read_uint32(
>> > -                                       &env.broken_test_config->expect_fail_test_idx,
>> > -                                               optarg) < 0) {
>> > -                                       rte_free(env.broken_test_config);
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > -                       } else if (strcmp(lgopts[option_index].name,
>> > -                                       CRYPTODEV_BK_DIR_KEY) == 0) {
>> > -                               if (!env.broken_test_config) {
>> > -                                       env.broken_test_config = rte_malloc(
>> > -                                               NULL,
>> > -                                               sizeof(*env.broken_test_config),
>> > -                                               0);
>> > -                                       if (!env.broken_test_config)
>> > -                                               return -ENOMEM;
>> > -
>> > -                                       env.broken_test_config->
>> > -                                               expect_fail_test_idx = 0;
>> > -                               }
>> > +                       break;
>> > +               }
>> > +               case CRYPTODEV_ID_KEYWORD_NUM:
>> > +               {
>> > +                       ret = parse_cryptodev_id_arg(optarg);
>> > +                       if (ret < 0) {
>> > +                               cryptodev_fips_validate_usage(prgname);
>> > +                               return -EINVAL;
>> > +                       }
>> > +                       break;
>> > +               }
>> > +               case CRYPTODEV_ST_KEYWORD_NUM:
>> > +               {
>> > +                       env.self_test = 1;
>> > +                       break;
>> > +               }
>> > +               case CRYPTODEV_BK_ID_KEYWORD_NUM:
>> > +               {
>> > +                       if (!env.broken_test_config) {
>> > +                               env.broken_test_config = rte_malloc(
>> > +                                       NULL,
>> > +                                       sizeof(*env.broken_test_config),
>> > +                                       0);
>> > +                               if (!env.broken_test_config)
>> > +                                       return -ENOMEM;
>> > +
>> > +                               env.broken_test_config->expect_fail_dir =
>> > +                                       self_test_dir_enc_auth_gen;
>> > +                       }
>> >
>> > -                               if (strcmp(optarg, CRYPTODEV_ENC_KEYWORD) == 0)
>> > -                                       env.broken_test_config->expect_fail_dir =
>> > -                                               self_test_dir_enc_auth_gen;
>> > -                               else if (strcmp(optarg, CRYPTODEV_DEC_KEYWORD)
>> > -                                               == 0)
>> > -                                       env.broken_test_config->expect_fail_dir =
>> > -                                               self_test_dir_dec_auth_verify;
>> > -                               else {
>> > -                                       rte_free(env.broken_test_config);
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > -                       } else if (strcmp(lgopts[option_index].name,
>> > -                                       MBUF_DATAROOM_KEYWORD) == 0) {
>> > -                               uint32_t data_room_size;
>> > -
>> > -                               if (parser_read_uint32(&data_room_size,
>> > -                                               optarg) < 0) {
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > +                       if (parser_read_uint32(
>> > +                               &env.broken_test_config->expect_fail_test_idx,
>> > +                                       optarg) < 0) {
>> > +                               rte_free(env.broken_test_config);
>> > +                               cryptodev_fips_validate_usage(prgname);
>> > +                               return -EINVAL;
>> > +                       }
>> > +                       break;
>> > +               }
>> > +               case CRYPTODEV_BK_DIR_KEY_NUM:
>> > +               {
>> > +                       if (!env.broken_test_config) {
>> > +                               env.broken_test_config = rte_malloc(
>> > +                                       NULL,
>> > +                                       sizeof(*env.broken_test_config),
>> > +                                       0);
>> > +                               if (!env.broken_test_config)
>> > +                                       return -ENOMEM;
>> > +
>> > +                               env.broken_test_config->
>> > +                                       expect_fail_test_idx = 0;
>> > +                       }
>> >
>> > -                               if (data_room_size == 0 ||
>> > -                                               data_room_size > UINT16_MAX) {
>> > -                                       cryptodev_fips_validate_usage(prgname);
>> > -                                       return -EINVAL;
>> > -                               }
>> > +                       if (strcmp(optarg, CRYPTODEV_ENC_KEYWORD) == 0)
>> > +                               env.broken_test_config->expect_fail_dir =
>> > +                                       self_test_dir_enc_auth_gen;
>> > +                       else if (strcmp(optarg, CRYPTODEV_DEC_KEYWORD)
>> > +                                       == 0)
>> > +                               env.broken_test_config->expect_fail_dir =
>> > +                                       self_test_dir_dec_auth_verify;
>> > +                       else {
>> > +                               rte_free(env.broken_test_config);
>> > +                               cryptodev_fips_validate_usage(prgname);
>> > +                               return -EINVAL;
>> > +                       }
>> > +                       break;
>> > +               }
>> > +               case MBUF_DATAROOM_KEYWORD_NUM:
>> > +               {
>> > +                       uint32_t data_room_size;
>>
>> Here, I don't think we need a temp storage.
>> If the value is invalid, the parsing and then init will fail.
>> You can directly pass &env.mbuf_data_room to parser_read_uint32 and
>> check its value.
>>
>>
>> >
>> > -                               env.mbuf_data_room = data_room_size;
>> > -                       } else {
>> > +                       if (parser_read_uint32(&data_room_size,
>> > +                                       optarg) < 0) {
>> >                                 cryptodev_fips_validate_usage(prgname);
>> >                                 return -EINVAL;
>> >                         }
>> > +
>> > +                       if (data_room_size == 0 ||
>> > +                                       data_room_size > UINT16_MAX) {
>> > +                               cryptodev_fips_validate_usage(prgname);
>> > +                               return -EINVAL;
>> > +                       }
>> > +
>> > +                       env.mbuf_data_room = data_room_size;
>> > +
>> >                         break;
>> > +               }
>> >                 default:
>> > -                       return -1;
>> > +               {
>> > +                       cryptodev_fips_validate_usage(prgname);
>> > +                       return -EINVAL;
>> > +               }
>> >                 }
>> >         }
>> >
>> > --
>> > 2.17.1
>> >
>>
>> I did not look too much at the rest of the series, but I guess most of
>> those comments apply to other patches.
>>
>>
>> --
>> David Marchand
>>
>
>
> --
> - Ibtisam
>


-- 
- Ibtisam

  reply	other threads:[~2020-11-04 10:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 12:53 Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 2/8] examples/l3fwd-acl: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 3/8] examples/packet_ordering: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 4/8] examples/performance-thread/l3fwd-thread: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 5/8] examples/qos_sched: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 6/8] examples/vhost: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 7/8] examples/vhost_crypto: " Ibtisam Tariq
2020-10-29 12:53 ` [dpdk-dev] [PATCH 8/8] examples/tep_termination: " Ibtisam Tariq
2020-10-29 13:16   ` David Marchand
2020-11-02  8:18     ` Ibtisam Tariq
2020-10-29 22:07 ` [dpdk-dev] [PATCH 1/8] examples/fips_validation: " David Marchand
2020-11-02  8:32   ` Ibtisam Tariq
2020-11-04 10:00     ` Ibtisam Tariq [this message]
2020-11-05  8:59       ` David Marchand
2020-11-10  6:10         ` Ibtisam Tariq
2020-11-10  8:23           ` David Marchand
2020-11-10  9:03             ` Ibtisam Tariq

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CA+8bGBsfVCO-qrBOjZYa8Ze+Aap3duDoLibkf6BNWu3RW4_wYw@mail.gmail.com \
    --to=ibtisam.tariq@emumba.com \
    --cc=chenbo.xia@intel.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=jasvinder.singh@intel.com \
    --cc=john.mcnamara@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=marko.kovacevic@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=reshma.pattan@intel.com \
    --cc=xiaoyun.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).