diff options
| author | Kaushal M <kaushal@redhat.com> | 2017-11-02 13:26:01 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-11-21 20:31:09 +0000 | 
| commit | 521626a952a0259b7cf4a1b43205b954d0252fbc (patch) | |
| tree | 22429a10aa1d6fb847ef0538953445469a86edb2 /cli | |
| parent | 7e20d03d37f2f0bc2da92174c914d55ab386f119 (diff) | |
cli: Fix coverity errors for cli-rpc-ops.c
Fixes issues 147, 168, 169, 219, 715, 718, 766, 768, 772, 774, 776, 782,
790 from the report at [1].
Also, fixed some other possible static checker errors as well.
[1]: https://download.gluster.org/pub/gluster/glusterfs/static-analysis/master/glusterfs-coverity/2017-10-30-9aa574a5/html/
BUG: 789278
Change-Id: I985cea1ef787d239b2632d5a7f467070846f92e4
Signed-off-by: Kaushal M <kaushal@redhat.com>
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 140 | 
1 files changed, 106 insertions, 34 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 0015a1198b7..a6efffc1207 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -294,6 +294,11 @@ gf_cli_output_peer_status (dict_t *dict, int count)                          ret = gf_cli_output_peer_hostnames (dict,                                                              hostname_count,                                                              key); +                        if (ret) { +                                gf_log ("cli", GF_LOG_WARNING, +                                        "error outputting peer other names"); +                                goto out; +                        }                  }                  i++;          } @@ -413,8 +418,6 @@ gf_cli_list_friends_cbk (struct rpc_req *req, struct iovec *iov,          gf_log ("cli", GF_LOG_DEBUG, "Received resp to list: %d",                  rsp.op_ret); -        ret = rsp.op_ret; -          if (!rsp.op_ret) {                  if (!rsp.friends.friends_len) { @@ -784,7 +787,6 @@ gf_cli_print_tier_info (dict_t *dict, int i, int brick_count)                  goto out;          cli_out ("Hot Tier :"); -        vol_type = hot_type;          hot_dist_count = (hot_replica_count ?                            hot_replica_count : 1); @@ -1381,7 +1383,6 @@ gf_cli3_1_uuid_reset_cbk (struct rpc_req *req, struct iovec *iov,          int                     ret   = -1;          cli_local_t             *local = NULL;          call_frame_t            *frame = NULL; -        dict_t                  *dict = NULL;          GF_ASSERT (myframe); @@ -1407,7 +1408,7 @@ gf_cli3_1_uuid_reset_cbk (struct rpc_req *req, struct iovec *iov,          gf_log ("cli", GF_LOG_INFO, "Received resp to uuid reset");          if (global_state->mode & GLUSTER_MODE_XML) { -                ret = cli_xml_output_dict ("uuidReset", dict, rsp.op_ret, +                ret = cli_xml_output_dict ("uuidReset", NULL, rsp.op_ret,                                             rsp.op_errno, rsp.op_errstr);                  if (ret)                          gf_log ("cli", GF_LOG_ERROR, @@ -1427,8 +1428,6 @@ out:          cli_local_wipe (local);          if (rsp.dict.dict_val)                  free (rsp.dict.dict_val); -        if (dict) -                dict_unref (dict);          gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);          return ret; @@ -2005,6 +2004,12 @@ gf_cli_defrag_volume_cbk (struct rpc_req *req, struct iovec *iov,                (cmd == GF_DEFRAG_CMD_STATUS_TIER)) &&               !(global_state->mode & GLUSTER_MODE_XML)) {                  ret = dict_get_str (dict, GF_REBALANCE_TID_KEY, &task_id_str); +                if (ret) { +                        gf_log ("cli", GF_LOG_WARNING, +                                "failed to get %s from dict", +                                GF_REBALANCE_TID_KEY); +                        goto out; +                }                  if (rsp.op_ret && strcmp (rsp.op_errstr, "")) {                          snprintf (msg, sizeof (msg), "%s", rsp.op_errstr);                  } else { @@ -2318,6 +2323,11 @@ gf_cli_set_volume_cbk (struct rpc_req *req, struct iovec *iov,          }          ret = dict_unserialize (rsp.dict.dict_val, rsp.dict.dict_len, &dict); +        if (ret) { +                gf_log ("cli", GF_LOG_ERROR, +                        "failed to unserialize volume set respone dict"); +                goto out; +        }          /* For brick processes graph change does not happen on the fly.           * The process has to be restarted. So this is a check from the @@ -3548,6 +3558,12 @@ print_quota_list_output (cli_local_t *local, char *path, char *default_sl,          if (limit_set) {                  if (limits->sl < 0) {                          ret = gf_string2percent (default_sl, &sl_num); +                        if (ret) { +                                gf_log ("cli", GF_LOG_ERROR, +                                        "could not convert default soft limit" +                                        " to percent"); +                                goto out; +                        }                          sl_num = (sl_num * limits->hl) / 100;                          sl_final = default_sl;                  } else { @@ -3584,7 +3600,7 @@ print_quota_list_output (cli_local_t *local, char *path, char *default_sl,                                                        sl_final, limits,                                                        used_space, sl, hl,                                                        sl_num, limit_set); - +out:          return ret;  } @@ -3717,8 +3733,6 @@ gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname,          char            key[1024]               = {0,};          char            mountdir[PATH_MAX]      = {0,};          char            *path                   = NULL; -        gf_boolean_t    xml_err_flag            = _gf_false; -        char            err_str[NAME_MAX]       = {0,};          int             type                    = -1;          if (!dict|| count <= 0) @@ -3761,13 +3775,6 @@ gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname,          }  out: -        if (xml_err_flag) { -                ret = cli_xml_output_str ("volQuota", NULL, -1, 0, err_str); -                if (ret) { -                        gf_log ("cli", GF_LOG_ERROR, "Error outputting in xml " -                                "format"); -                } -        }          return ret;  } @@ -4456,7 +4463,7 @@ gf_cli_list_friends (call_frame_t *frame, xlator_t *this,                                (xdrproc_t) xdr_gf1_cli_peer_list_req);  out: -        if (ret) { +        if (ret && frame) {                  /*                   * If everything goes fine, gf_cli_list_friends_cbk()                   * [invoked through cli_cmd_submit()]resets the @@ -4587,6 +4594,11 @@ gf_cli_get_volume (call_frame_t *frame, xlator_t *this,          ret = dict_allocate_and_serialize (dict, &req.dict.dict_val,                                             &req.dict.dict_len); +        if (ret) { +                gf_log (frame->this->name, GF_LOG_ERROR, +                        "failed to serialize dict"); +                goto out; +        }          ret = cli_cmd_submit (NULL, &req, frame, cli_rpc_prog,                                GLUSTER_CLI_GET_VOLUME, NULL, @@ -5602,7 +5614,7 @@ gf_cli_gsync_config_command (dict_t *dict)                  op_name = NULL;          ret = dict_get_str (dict, "conf_path", &confpath); -        if (!confpath) { +        if (ret || !confpath) {                  ret = snprintf (conf_path, sizeof(conf_path) - 1,                                  "%s/"GEOREP"/gsyncd_template.conf", gwd);                  conf_path[ret] = '\0'; @@ -6179,8 +6191,6 @@ gf_cli_gsync_set_cbk (struct rpc_req *req, struct iovec *iov,          ret = dict_get_str (dict, "gsync-status", &gsync_status);          if (!ret)                  cli_out ("%s", gsync_status); -        else -                ret = 0;          ret = dict_get_int32 (dict, "type", &type);          if (ret) { @@ -6381,6 +6391,10 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)                  snprintf (key, sizeof (key), "%d-%d-read-%d", count,                            interval, (1 << i));                  ret = dict_get_uint64 (dict, key, &rb_counts[i]); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }          }          for (i = 0; i < 32; i++) { @@ -6388,12 +6402,20 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)                  snprintf (key, sizeof (key), "%d-%d-write-%d", count, interval,                            (1<<i));                  ret = dict_get_uint64 (dict, key, &wb_counts[i]); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }          }          for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) {                  snprintf (key, sizeof (key), "%d-%d-%d-upcall-hits", count,                            interval, i);                  ret = dict_get_uint64 (dict, key, &upcall_info[i].fop_hits); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }                  upcall_info[i].fop_name = (char *)gf_upcall_list[i];          } @@ -6402,21 +6424,37 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)                  snprintf (key, sizeof (key), "%d-%d-%d-hits", count,                            interval, i);                  ret = dict_get_uint64 (dict, key, &profile_info[i].fop_hits); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "%d-%d-%d-avglatency", count,                            interval, i);                  ret = dict_get_double (dict, key, &profile_info[i].avg_latency); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "%d-%d-%d-minlatency", count,                            interval, i);                  ret = dict_get_double (dict, key, &profile_info[i].min_latency); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "%d-%d-%d-maxlatency", count,                            interval, i);                  ret = dict_get_double (dict, key, &profile_info[i].max_latency); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get %s from dict", key); +                }                  profile_info[i].fop_name = (char *)gf_fop_list[i];                  total_percentage_latency += @@ -6435,16 +6473,22 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)          memset (key, 0, sizeof (key));          snprintf (key, sizeof (key), "%d-%d-duration", count, interval);          ret = dict_get_uint64 (dict, key, &sec); +        if (ret) { +                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +        }          memset (key, 0, sizeof (key));          snprintf (key, sizeof (key), "%d-%d-total-read", count, interval);          ret = dict_get_uint64 (dict, key, &r_count); +        if (ret) { +                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key); +        }          memset (key, 0, sizeof (key));          snprintf (key, sizeof (key), "%d-%d-total-write", count, interval);          ret = dict_get_uint64 (dict, key, &w_count); - -        if (ret == 0) { +        if (ret) { +                gf_log ("cli", GF_LOG_DEBUG, "failed to get %s from dict", key);          }          if (interval == -1) @@ -8976,8 +9020,7 @@ cmd_heal_volume_brick_out (dict_t *dict, int brick)          snprintf (key, sizeof key, "%d-shd-status",brick);          ret = dict_get_str (dict, key, &shd_status); -        if(!shd_status) -        { +        if (!shd_status) {                  snprintf (key, sizeof key, "%d-count", brick);                  ret = dict_get_uint64 (dict, key, &num_entries);                  cli_out ("Number of entries: %"PRIu64, num_entries); @@ -8992,7 +9035,7 @@ cmd_heal_volume_brick_out (dict_t *dict, int brick)                          snprintf (key, sizeof key, "%d-%"PRIu64"-time",                                    brick, i);                          ret = dict_get_uint32 (dict, key, &time); -                        if (!time) { +                        if (ret || !time) {                                  cli_out ("%s", path);                          } else {                                  gf_time_fmt (timestr, sizeof timestr, @@ -10872,21 +10915,46 @@ gf_cli_snapshot_get_data_from_dict (dict_t *dict, char **snap_name,          GF_VALIDATE_OR_GOTO ("cli", dict, out); -        if (snap_name) +        if (snap_name) {                  ret = dict_get_str (dict, "snapname", snap_name); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get snapname from dict"); +                } +        } -        if (volname) +        if (volname) {                  ret = dict_get_str (dict, "volname1", volname); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get volname1 from dict"); +                } +        } -        if (snap_uuid) +        if (snap_uuid) {                  ret = dict_get_str (dict, "snapuuid", snap_uuid); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get snapuuid from dict"); +                } +        } -        if (soft_limit_flag) +        if (soft_limit_flag) {                  ret = dict_get_int8 (dict, "soft-limit-reach",                                       soft_limit_flag); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get soft-limit-reach from dict"); +                } +        } -        if (clone_name) +        if (clone_name) {                  ret = dict_get_str (dict, "clonename", clone_name); +                if (ret) { +                        gf_log ("cli", GF_LOG_DEBUG, +                                "failed to get clonename from dict"); +                } +        }          ret = 0;  out: @@ -11384,6 +11452,13 @@ gf_cli_snapshot_for_status (call_frame_t *frame, xlator_t *this,                   * then it will show snapshot not present. Which will                   * not be appropriate.                   */ +                if (ret && +                    (cmd != GF_SNAP_STATUS_TYPE_ALL || +                     cmd != GF_SNAP_STATUS_TYPE_VOL)) { +                        gf_log ("cli", GF_LOG_ERROR, +                                "cli_to_glusterd for snapshot status failed"); +                        goto out; +                }                  dict_unref (snap_dict);                  snap_dict = NULL;          } @@ -11500,7 +11575,6 @@ gf_cli_barrier_volume_cbk (struct rpc_req *req, struct iovec *iov,  {          gf_cli_rsp                      rsp = {0,};          int                             ret = -1; -        dict_t                          *dict = NULL;          GF_ASSERT (myframe); @@ -11528,8 +11602,6 @@ gf_cli_barrier_volume_cbk (struct rpc_req *req, struct iovec *iov,          ret = rsp.op_ret;  out: -        if (dict) -                dict_unref (dict);          free (rsp.op_errstr);          free (rsp.dict.dict_val);          cli_cmd_broadcast_response (ret);  | 
