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:
parent
2d272954ac
commit
01e5610da8
@ -2,6 +2,12 @@
|
||||
|
||||
## 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
|
||||
|
||||
A new public header file env_dpdk.h has been introduced, and function spdk_env_dpdk_post_init
|
||||
|
@ -71,7 +71,7 @@ spdk_startup(void *arg1, void *arg2)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
iscsi_parse_arg(int ch, char *arg)
|
||||
{
|
||||
switch (ch) {
|
||||
@ -82,6 +82,7 @@ iscsi_parse_arg(int ch, char *arg)
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -41,9 +41,10 @@ nvmf_usage(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
nvmf_parse_arg(int ch, char *arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -77,7 +77,7 @@ spdk_tgt_save_pid(const char *pid_path)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
static int
|
||||
spdk_tgt_parse_arg(int ch, char *arg)
|
||||
{
|
||||
switch (ch) {
|
||||
@ -90,6 +90,7 @@ spdk_tgt_parse_arg(int ch, char *arg)
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -62,7 +62,7 @@ save_pid(const char *pid_path)
|
||||
fclose(pid_file);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
vhost_parse_arg(int ch, char *arg)
|
||||
{
|
||||
switch (ch) {
|
||||
@ -73,6 +73,7 @@ vhost_parse_arg(int ch, char *arg)
|
||||
spdk_vhost_set_socket_path(arg);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -67,13 +67,14 @@ hello_bdev_usage(void)
|
||||
/*
|
||||
* 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) {
|
||||
case 'b':
|
||||
g_bdev_name = arg;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -91,7 +91,7 @@ hello_sock_usage(void)
|
||||
/*
|
||||
* 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) {
|
||||
case 'H':
|
||||
@ -106,6 +106,7 @@ static void hello_sock_parse_arg(int ch, char *arg)
|
||||
case 'V':
|
||||
g_verbose = true;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -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,
|
||||
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));
|
||||
|
||||
/**
|
||||
|
@ -775,7 +775,7 @@ usage(void (*app_usage)(void))
|
||||
spdk_app_parse_args_rvals_t
|
||||
spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *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))
|
||||
{
|
||||
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);
|
||||
goto out;
|
||||
default:
|
||||
app_parse(ch, optarg);
|
||||
rc = app_parse(ch, optarg);
|
||||
if (rc) {
|
||||
fprintf(stderr, "Parsing application specific arguments failed: %d\n", rc);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,9 +44,10 @@ bdev_svc_usage(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
bdev_svc_parse_arg(int ch, char *arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -944,9 +944,10 @@ bdevio_usage(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
bdevio_parse_arg(int ch, char *arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -823,7 +823,7 @@ spdk_bdevperf_shutdown_cb(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
bdevperf_parse_arg(int ch, char *arg)
|
||||
{
|
||||
switch (ch) {
|
||||
@ -853,6 +853,7 @@ bdevperf_parse_arg(int ch, char *arg)
|
||||
g_show_performance_period_in_usec);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -103,7 +103,7 @@ mkfs_usage(void)
|
||||
printf(" -C <size> cluster size\n");
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
mkfs_parse_arg(int ch, char *arg)
|
||||
{
|
||||
bool has_prefix;
|
||||
@ -115,7 +115,7 @@ mkfs_parse_arg(int ch, char *arg)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
@ -56,9 +56,10 @@ unittest_usage(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
unittest_parse_args(int ch, char *arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user