From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id ABCF1A04B1; Wed, 4 Nov 2020 11:00:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 740F3C8B6; Wed, 4 Nov 2020 11:00:14 +0100 (CET) Received: from mail-lj1-f193.google.com (mail-lj1-f193.google.com [209.85.208.193]) by dpdk.org (Postfix) with ESMTP id 5095DC8B0 for ; Wed, 4 Nov 2020 11:00:13 +0100 (CET) Received: by mail-lj1-f193.google.com with SMTP id p15so22349066ljj.8 for ; Wed, 04 Nov 2020 02:00:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emumba-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KYYaEJteiAdMlGbekkoYiJh+mb6X11rl3g01aIYeW9g=; b=U+9i3UYyJajec7doJu3oSxFGzjM80iPXI1JkS+JjJ72FbZmVUBybYnGcTakdcqDjoZ klsG3V/D7f0XYrSGpmpoZlZX9DAS/6s4bq0bEarYyKJMrqKQ9yGDunBIuzCmhkYgc1+e 0q3xTEQBPwAKujUPOUWygPRB04PBaZBiVxxcWJ2ECaeXPJLm1utrG6yPTPKpS92c/EZB ahIDQ4niczvBn9tpq86vRtGy2VTL1dSqCBdVdn7WYmOzOaZ+lFclCyBFMgg6wNRn7JDn i6jFSIhOSJM0rRyCB8YwBk9FOwiDufuqLRECtKw1eYt0cMjprWQeT5o1dXDiCFmuzU37 RCtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KYYaEJteiAdMlGbekkoYiJh+mb6X11rl3g01aIYeW9g=; b=C7fo1KJLKnej+bhciRnA4P/nYs6Y2QCvF3rr1ZNB8JJnwSordY27vTcQcpqa6+GJbT mDPLpy64kTi9DiGUnOpaEX791F6TFfEJ5PutwcBH9MxUrWaGKKCPk+5ejsMExmyy94FH pGL98aLERc8NJPOUT3hn7bYNzPOZ/uHI1AveKhlV1Bq4JzD7w0zZnsuPcLD6nwHGnvzZ qxNC2XLHQ9zu/HqXJbwmG4ysYGckrIU3lGmupnByZmTl1ydo1X2WySHtISMTmajc4VCy Iu3m3b006XPPoTIf7urQNGFvRhDT9mrGbJqFiojTzrn4bVjvBfN/jVZYowk1wwJ9Dx+6 +frw== X-Gm-Message-State: AOAM530PBWZPgc9kbOP/wMNPp0FCbmBR2qnwF/gJ6V8Qne7y+Lo1BxOb 7DNOI5+HVJkPLo/k7/LbkjUwEdL0694GRFJYL3OdOQ== X-Google-Smtp-Source: ABdhPJwUL598PGD5RTKpzxLU9elRnMGiTjA+qbMhIg+KaH/65fJKHeG9yVuMKBSrJ9UAKHLQRm8BYH+Ci2bxVCB1qJc= X-Received: by 2002:a2e:6c0e:: with SMTP id h14mr9665986ljc.117.1604484011686; Wed, 04 Nov 2020 02:00:11 -0800 (PST) MIME-Version: 1.0 References: <20201029125339.30916-1-ibtisam.tariq@emumba.com> In-Reply-To: From: Ibtisam Tariq Date: Wed, 4 Nov 2020 15:00:00 +0500 Message-ID: To: David Marchand Cc: "Kovacevic, Marko" , "Ananyev, Konstantin" , "Pattan, Reshma" , "Mcnamara, John" , Cristian Dumitrescu , "Singh, Jasvinder" , "Xia, Chenbo" , Maxime Coquelin , Xiaoyun Li , dev Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH 1/8] examples/fips_validation: enhance getopt_long usage X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 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 wrote: >> >> Hello Ibtisam, >> >> On Thu, Oct 29, 2020 at 1:55 PM Ibtisam Tariq 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 >> > Signed-off-by: Ibtisam Tariq >> > --- >> > 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