parse: add return value to app_parse callback

Need to check user input and return status of parsing
to prevent app or target from crashing.
Input checking function will be added in the future.

Change-Id: I8167ac13306ae4f81e2cacb80edd9dcf9382c374
Signed-off-by: Chunyang Hui <chunyang.hui@intel.com>
Reviewed-on: https://review.gerrithub.io/c/439479
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: GangCao <gang.cao@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
Chunyang Hui 2019-01-08 14:40:06 -05:00 committed by Darek Stojaczyk
parent 2d272954ac
commit 01e5610da8
14 changed files with 35 additions and 15 deletions

View File

@ -2,6 +2,12 @@
## v19.01: (Upcoming Release) ## v19.01: (Upcoming Release)
### event framework
For `spdk_app_parse_args`, add return value to the callback which parses application
specific command line parameters to protect SPDK applications from crashing by invalid
values from user input.
### environment ### environment
A new public header file env_dpdk.h has been introduced, and function spdk_env_dpdk_post_init A new public header file env_dpdk.h has been introduced, and function spdk_env_dpdk_post_init

View File

@ -71,7 +71,7 @@ spdk_startup(void *arg1, void *arg2)
} }
} }
static void static int
iscsi_parse_arg(int ch, char *arg) iscsi_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
@ -82,6 +82,7 @@ iscsi_parse_arg(int ch, char *arg)
assert(false); assert(false);
break; break;
} }
return 0;
} }
int int

View File

@ -41,9 +41,10 @@ nvmf_usage(void)
{ {
} }
static void static int
nvmf_parse_arg(int ch, char *arg) nvmf_parse_arg(int ch, char *arg)
{ {
return 0;
} }
static void static void

View File

@ -77,7 +77,7 @@ spdk_tgt_save_pid(const char *pid_path)
} }
static void static int
spdk_tgt_parse_arg(int ch, char *arg) spdk_tgt_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
@ -90,6 +90,7 @@ spdk_tgt_parse_arg(int ch, char *arg)
break; break;
#endif #endif
} }
return 0;
} }
static void static void

View File

@ -62,7 +62,7 @@ save_pid(const char *pid_path)
fclose(pid_file); fclose(pid_file);
} }
static void static int
vhost_parse_arg(int ch, char *arg) vhost_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
@ -73,6 +73,7 @@ vhost_parse_arg(int ch, char *arg)
spdk_vhost_set_socket_path(arg); spdk_vhost_set_socket_path(arg);
break; break;
} }
return 0;
} }
static void static void

View File

@ -67,13 +67,14 @@ hello_bdev_usage(void)
/* /*
* This function is called to parse the parameters that are specific to this application * This function is called to parse the parameters that are specific to this application
*/ */
static void hello_bdev_parse_arg(int ch, char *arg) static int hello_bdev_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
case 'b': case 'b':
g_bdev_name = arg; g_bdev_name = arg;
break; break;
} }
return 0;
} }
/* /*

View File

@ -91,7 +91,7 @@ hello_sock_usage(void)
/* /*
* This function is called to parse the parameters that are specific to this application * This function is called to parse the parameters that are specific to this application
*/ */
static void hello_sock_parse_arg(int ch, char *arg) static int hello_sock_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
case 'H': case 'H':
@ -106,6 +106,7 @@ static void hello_sock_parse_arg(int ch, char *arg)
case 'V': case 'V':
g_verbose = true; g_verbose = true;
} }
return 0;
} }
static void static void

View File

@ -247,7 +247,7 @@ typedef enum spdk_app_parse_args_rvals spdk_app_parse_args_rvals_t;
*/ */
spdk_app_parse_args_rvals_t spdk_app_parse_args(int argc, char **argv, spdk_app_parse_args_rvals_t spdk_app_parse_args(int argc, char **argv,
struct spdk_app_opts *opts, const char *getopt_str, struct spdk_app_opts *opts, const char *getopt_str,
struct option *app_long_opts, void (*parse)(int ch, char *arg), struct option *app_long_opts, int (*parse)(int ch, char *arg),
void (*usage)(void)); void (*usage)(void));
/** /**

View File

@ -775,7 +775,7 @@ usage(void (*app_usage)(void))
spdk_app_parse_args_rvals_t spdk_app_parse_args_rvals_t
spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *opts, spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *opts,
const char *app_getopt_str, struct option *app_long_opts, const char *app_getopt_str, struct option *app_long_opts,
void (*app_parse)(int ch, char *arg), int (*app_parse)(int ch, char *arg),
void (*app_usage)(void)) void (*app_usage)(void))
{ {
int ch, rc, opt_idx, global_long_opts_len, app_long_opts_len; int ch, rc, opt_idx, global_long_opts_len, app_long_opts_len;
@ -992,7 +992,11 @@ spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *opts,
usage(app_usage); usage(app_usage);
goto out; goto out;
default: default:
app_parse(ch, optarg); rc = app_parse(ch, optarg);
if (rc) {
fprintf(stderr, "Parsing application specific arguments failed: %d\n", rc);
goto out;
}
} }
} }

View File

@ -44,9 +44,10 @@ bdev_svc_usage(void)
{ {
} }
static void static int
bdev_svc_parse_arg(int ch, char *arg) bdev_svc_parse_arg(int ch, char *arg)
{ {
return 0;
} }
static void static void

View File

@ -944,9 +944,10 @@ bdevio_usage(void)
{ {
} }
static void static int
bdevio_parse_arg(int ch, char *arg) bdevio_parse_arg(int ch, char *arg)
{ {
return 0;
} }
int int

View File

@ -823,7 +823,7 @@ spdk_bdevperf_shutdown_cb(void)
} }
} }
static void static int
bdevperf_parse_arg(int ch, char *arg) bdevperf_parse_arg(int ch, char *arg)
{ {
switch (ch) { switch (ch) {
@ -853,6 +853,7 @@ bdevperf_parse_arg(int ch, char *arg)
g_show_performance_period_in_usec); g_show_performance_period_in_usec);
break; break;
} }
return 0;
} }
int int

View File

@ -103,7 +103,7 @@ mkfs_usage(void)
printf(" -C <size> cluster size\n"); printf(" -C <size> cluster size\n");
} }
static void static int
mkfs_parse_arg(int ch, char *arg) mkfs_parse_arg(int ch, char *arg)
{ {
bool has_prefix; bool has_prefix;
@ -115,7 +115,7 @@ mkfs_parse_arg(int ch, char *arg)
default: default:
break; break;
} }
return 0;
} }
int main(int argc, char **argv) int main(int argc, char **argv)

View File

@ -56,9 +56,10 @@ unittest_usage(void)
{ {
} }
static void static int
unittest_parse_args(int ch, char *arg) unittest_parse_args(int ch, char *arg)
{ {
return 0;
} }
static void static void