Coverity flagged some cases where ovs_scan() was used without checking its return value. This patch addresses the issue by adding proper return checks and error reporting.
Additionally, test cases were added to ensure correctness. Signed-off-by: Eelco Chaudron <echau...@redhat.com> --- tests/ovs-vsctl.at | 15 +++++++++++++++ utilities/ovs-vsctl.c | 25 ++++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at index a0e49155a..0778c4480 100644 --- a/tests/ovs-vsctl.at +++ b/tests/ovs-vsctl.at @@ -1178,9 +1178,15 @@ AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=2 icmp_first=2 icmp_reply=3])], ]) AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3 ]) +AT_CHECK([RUN_OVS_VSCTL([add-zone-tp netdev zone=UNKNOWN icmp_first=2 icmp_reply=3])], + [1], [], [ovs-vsctl: invalid zone argument, zone=UNKNOWN +]) AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=11])], [1], [], [ovs-vsctl: zone id 11 does not have a policy ]) +AT_CHECK([RUN_OVS_VSCTL([del-zone-tp netdev zone=UNKNOWN])], + [1], [], [ovs-vsctl: invalid zone argument, zone=UNKNOWN +]) AT_CHECK([RUN_OVS_VSCTL([list-zone-tp netdev])], [0], [Zone:2, Timeout Policies: icmp_first=2 icmp_reply=3 ]) @@ -1206,6 +1212,15 @@ AT_CHECK([RUN_OVS_VSCTL([set-zone-limit netdev default -1])], AT_CHECK([RUN_OVS_VSCTL([del-zone-limit netdev default])], [1], [], [ovs-vsctl: datapath netdev does not have a limit ]) +AT_CHECK([RUN_OVS_VSCTL([set-zone-limit netdev UNKNOWN 1])], + [1], [], [ovs-vsctl: invalid zone id, UNKNOWN +]) +AT_CHECK([RUN_OVS_VSCTL([set-zone-limit netdev default VALUE])], + [1], [], [ovs-vsctl: invalid limit, VALUE +]) +AT_CHECK([RUN_OVS_VSCTL([del-zone-limit netdev UNKNOWN])], + [1], [], [ovs-vsctl: invalid zone id, UNKNOWN +]) AT_CHECK([RUN_OVS_VSCTL([-- --id=@m create Datapath datapath_version=0 'capabilities={recirc=true}' -- set Open_vSwitch . datapaths:"system"=@m])], [0], [stdout]) AT_CHECK([RUN_OVS_VSCTL([list-dp-cap nosystem])], diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index dd494622f..691b974e3 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -1294,9 +1294,12 @@ cmd_add_zone_tp(struct ctl_context *ctx) int64_t zone_id; const char *dp_name = ctx->argv[1]; - ovs_scan(ctx->argv[2], "zone=%"SCNi64, &zone_id); bool may_exist = shash_find(&ctx->options, "--may-exist") != NULL; + if (!ovs_scan(ctx->argv[2], "zone=%"SCNi64, &zone_id)) { + ctl_fatal("invalid zone argument, %s", ctx->argv[2]); + } + struct ovsrec_datapath *dp = find_datapath(vsctl_ctx, dp_name); if (!dp) { ctl_fatal("datapath %s does not exist", dp_name); @@ -1331,7 +1334,10 @@ cmd_del_zone_tp(struct ctl_context *ctx) bool must_exist = !shash_find(&ctx->options, "--if-exists"); const char *dp_name = ctx->argv[1]; - ovs_scan(ctx->argv[2], "zone=%"SCNi64, &zone_id); + + if (!ovs_scan(ctx->argv[2], "zone=%"SCNi64, &zone_id)) { + ctl_fatal("invalid zone argument, %s", ctx->argv[2]); + } struct ovsrec_datapath *dp = find_datapath(vsctl_ctx, dp_name); if (!dp) { @@ -1396,8 +1402,14 @@ cmd_set_zone_limit(struct ctl_context *ctx) const char *dp_name = ctx->argv[1]; - ovs_scan(ctx->argv[2], "%"SCNi64, &zone_id); - ovs_scan(ctx->argv[3], "%"SCNi64, &limit); + if (!ovs_scan(ctx->argv[2], "%"SCNi64, &zone_id) + && strcmp(ctx->argv[2], "default")) { + ctl_fatal("invalid zone id, %s", ctx->argv[2]); + } + + if (!ovs_scan(ctx->argv[3], "%"SCNi64, &limit)) { + ctl_fatal("invalid limit, %s", ctx->argv[3]); + } struct ovsrec_datapath *dp = find_datapath(vsctl_ctx, dp_name); if (!dp) { @@ -1435,7 +1447,10 @@ cmd_del_zone_limit(struct ctl_context *ctx) bool must_exist = !shash_find(&ctx->options, "--if-exists"); const char *dp_name = ctx->argv[1]; - ovs_scan(ctx->argv[2], "%"SCNi64, &zone_id); + if (!ovs_scan(ctx->argv[2], "%"SCNi64, &zone_id) + && strcmp(ctx->argv[2], "default")) { + ctl_fatal("invalid zone id, %s", ctx->argv[2]); + } struct ovsrec_datapath *dp = find_datapath(vsctl_ctx, dp_name); if (!dp) { -- 2.47.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev