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)
|
## 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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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
|
||||||
|
@ -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));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user