From f4e3a8239c520606032aa38f7c114cd9600385f3 Mon Sep 17 00:00:00 2001 From: Amir Shehata Date: Thu, 2 Feb 2017 18:05:20 -0800 Subject: [PATCH] LU-9057 lnet: fix static analysis issues Fixed a set of issues found while running static analysis. Test-Parameters: trivial Signed-off-by: Amir Shehata Change-Id: I22ddfdda86c979c7a300ab9df777efbdd5973ac5 Reviewed-on: https://review.whamcloud.com/26687 Tested-by: Jenkins Reviewed-by: Olaf Weber Tested-by: Maloo Reviewed-by: Doug Oucharek Reviewed-by: Oleg Drokin --- lnet/lnet/peer.c | 2 +- lnet/utils/lnetconfig/liblnetconfig.c | 53 ++++++++++++++++++++++++++--------- lnet/utils/lnetctl.c | 17 +++++++---- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/lnet/lnet/peer.c b/lnet/lnet/peer.c index 01ee5ca..d1c1342 100644 --- a/lnet/lnet/peer.c +++ b/lnet/lnet/peer.c @@ -718,7 +718,7 @@ out_enomem: static int lnet_add_prim_lpni(lnet_nid_t nid) { - int rc; + int rc = 0; struct lnet_peer *peer; struct lnet_peer_ni *lpni; diff --git a/lnet/utils/lnetconfig/liblnetconfig.c b/lnet/utils/lnetconfig/liblnetconfig.c index 37d254c..dc27874 100644 --- a/lnet/utils/lnetconfig/liblnetconfig.c +++ b/lnet/utils/lnetconfig/liblnetconfig.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -872,7 +873,7 @@ out: static int socket_intf_query(int request, char *intf, struct ifreq *ifr) { - int rc; + int rc = 0; int sockfd; if (strlen(intf) >= IFNAMSIZ || ifr == NULL) @@ -885,9 +886,11 @@ static int socket_intf_query(int request, char *intf, strcpy(ifr->ifr_name, intf); rc = ioctl(sockfd, request, ifr); if (rc != 0) - return LUSTRE_CFG_RC_BAD_PARAM; + rc = LUSTRE_CFG_RC_BAD_PARAM; - return 0; + close(sockfd); + + return rc; } /* @@ -1157,6 +1160,8 @@ lustre_lnet_ioctl_config_ni(struct list_head *intf_list, len = sizeof(struct lnet_ioctl_config_ni); data = calloc(1, len); + if (!data) + return LUSTRE_CFG_RC_OUT_OF_MEM; conf = (struct lnet_ioctl_config_ni*) data; if (i == 0 && tunables != NULL) tun = (struct lnet_ioctl_config_lnd_tunables*) @@ -1202,8 +1207,10 @@ lustre_lnet_ioctl_config_ni(struct list_head *intf_list, snprintf(err_str, LNET_MAX_STR_LEN, "\"cannot add network: %s\"", strerror(errno)); + free(data); return rc; } + free(data); i++; } @@ -1231,6 +1238,11 @@ lustre_lnet_config_ip2nets(struct lustre_lnet_ip2nets *ip2nets, goto out; } + /* + * call below function to resolve the rules into a list of nids. + * The memory is allocated in that function then freed here when + * it's no longer needed. + */ rc = lustre_lnet_resolve_ip2nets_rule(ip2nets, &nids, &nnids); if (rc != LUSTRE_CFG_RC_NO_ERR && rc != LUSTRE_CFG_RC_MATCH) { snprintf(err_str, @@ -1242,14 +1254,15 @@ lustre_lnet_config_ip2nets(struct lustre_lnet_ip2nets *ip2nets, if (list_empty(&ip2nets->ip2nets_net.nw_intflist)) { snprintf(err_str, sizeof(err_str), "\"no interfaces match ip2nets rules\""); - goto out; + goto free_nids_out; } rc = lustre_lnet_ioctl_config_ni(&ip2nets->ip2nets_net.nw_intflist, tunables, global_cpts, nids, err_str); - if (rc != LUSTRE_CFG_RC_NO_ERR) - free(nids); + +free_nids_out: + free(nids); out: cYAML_build_error(rc, seq_no, ADD_CMD, "ip2nets", err_str, err_rc); @@ -1301,6 +1314,10 @@ int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr, else len = sizeof(struct lnet_ioctl_config_ni); data = calloc(1, len); + if (!data) { + rc = LUSTRE_CFG_RC_OUT_OF_MEM; + goto out; + } conf = (struct lnet_ioctl_config_ni*) data; if (tunables != NULL) tun = (struct lnet_ioctl_config_lnd_tunables*) @@ -1343,8 +1360,10 @@ int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr, goto out; } - if (LNET_NETTYP(nw_descr->nw_id) == LOLND) - return LUSTRE_CFG_RC_NO_ERR; + if (LNET_NETTYP(nw_descr->nw_id) == LOLND) { + rc = LUSTRE_CFG_RC_NO_ERR; + goto out; + } if (nw_descr->nw_id == LNET_NIDNET(LNET_NID_ANY)) { snprintf(err_str, @@ -1406,9 +1425,6 @@ int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw_descr, __u32 nnids = 0; struct lnet_dlc_intf_descr *intf_descr, *tmp; - if (LNET_NETTYP(nw_descr->nw_id) == LOLND) - return LUSTRE_CFG_RC_NO_ERR; - snprintf(err_str, sizeof(err_str), "\"success\""); if (nw_descr == NULL) { @@ -1419,6 +1435,9 @@ int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw_descr, goto out; } + if (LNET_NETTYP(nw_descr->nw_id) == LOLND) + return LUSTRE_CFG_RC_NO_ERR; + if (nw_descr->nw_id == LNET_NIDNET(LNET_NID_ANY)) { snprintf(err_str, sizeof(err_str), @@ -2201,7 +2220,7 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc, struct cYAML **err_rc) { struct lnet_ioctl_numa_range data; - int rc = LUSTRE_CFG_RC_OUT_OF_MEM; + int rc; int l_errno; char err_str[LNET_MAX_STR_LEN]; struct cYAML *root = NULL, *range = NULL; @@ -2221,6 +2240,8 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc, goto out; } + rc = LUSTRE_CFG_RC_OUT_OF_MEM; + root = cYAML_create_object(NULL, NULL); if (root == NULL) goto out; @@ -2237,6 +2258,7 @@ int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc, cYAML_print_tree(root); snprintf(err_str, sizeof(err_str), "\"success\""); + rc = LUSTRE_CFG_RC_NO_ERR; out: if (show_rc == NULL || rc != LUSTRE_CFG_RC_NO_ERR) { cYAML_free_tree(root); @@ -2257,7 +2279,7 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc, struct cYAML **err_rc) { struct lnet_ioctl_lnet_stats data; - int rc = LUSTRE_CFG_RC_OUT_OF_MEM; + int rc; int l_errno; char err_str[LNET_MAX_STR_LEN]; struct cYAML *root = NULL, *stats = NULL; @@ -2277,6 +2299,8 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc, goto out; } + rc = LUSTRE_CFG_RC_OUT_OF_MEM; + root = cYAML_create_object(NULL, NULL); if (root == NULL) goto out; @@ -2333,6 +2357,7 @@ int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc, cYAML_print_tree(root); snprintf(err_str, sizeof(err_str), "\"success\""); + rc = LUSTRE_CFG_RC_NO_ERR; out: if (show_rc == NULL || rc != LUSTRE_CFG_RC_NO_ERR) { cYAML_free_tree(root); @@ -2539,6 +2564,8 @@ static int handle_yaml_config_ni(struct cYAML *tree, struct cYAML **show_rc, net = cYAML_get_object_item(tree, "net type"); if (net) nw_descr.nw_id = libcfs_str2net(net->cy_valuestring); + else + nw_descr.nw_id = LOLND; /* * if neither net nor ip2nets are present, then we can not diff --git a/lnet/utils/lnetctl.c b/lnet/utils/lnetctl.c index 56e1033..819ce0b 100644 --- a/lnet/utils/lnetctl.c +++ b/lnet/utils/lnetctl.c @@ -1126,9 +1126,12 @@ static int jt_add_peer_nid(int argc, char **argv) !non_mr, -1, &err_rc); failed: - for (i = 0; i < size; i++) - free(nids[i]); - free(nids); + if (nids) { + /* free the array of nids */ + for (i = 0; i < size; i++) + free(nids[i]); + free(nids); + } if (rc != LUSTRE_CFG_RC_NO_ERR) cYAML_print_tree2file(stderr, err_rc); @@ -1178,9 +1181,11 @@ static int jt_del_peer_nid(int argc, char **argv) rc = lustre_lnet_del_peer_nid(prim_nid, nids, size, -1, &err_rc); failed: - for (i = 0; i < size; i++) - free(nids[i]); - free(nids); + if (nids) { + for (i = 0; i < size; i++) + free(nids[i]); + free(nids); + } if (rc != LUSTRE_CFG_RC_NO_ERR) cYAML_print_tree2file(stderr, err_rc); -- 1.8.3.1