[PATCH 29/47] staging/lustre/lnet: lnet: fix issues found by Klocwork Insight tool

2014-04-27 Thread Oleg Drokin
From: Dmitry Eremin 

Null pointer 'cp' that comes from line 2544 may be dereferenced
at line 2618.

Pointer 'ni' checked for NULL at line 1569 may be passed to
function and may be dereferenced there by passing argument 1 to
function 'lnet_ni_notify_locked' at line 1621.

Null pointer 'best_iface' that comes from line 802 may be
dereferenced at line 832.

Buffer overflow of string buffer due to non null terminated string.

Pointer 'tsc' returned from call to function 'sfw_find_test_case'
at line 571 may be NULL and will be dereferenced at line 572.

Local variable 'hash' is never used.

Signed-off-by: Dmitry Eremin 
Reviewed-on: http://review.whamcloud.com/9386
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4629
Reviewed-by: John L. Hammond 
Reviewed-by: Isaac Huang 
Signed-off-by: Oleg Drokin 
---
 drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c |  8 ++--
 drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c|  4 ++--
 drivers/staging/lustre/lnet/lnet/api-ni.c  |  6 +++---
 drivers/staging/lustre/lnet/lnet/router.c  |  3 ++-
 drivers/staging/lustre/lnet/selftest/conctl.c  | 11 +++
 drivers/staging/lustre/lnet/selftest/framework.c   | 14 +++---
 6 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c 
b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
index 6173e74..9bf6c94 100644
--- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
+++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
@@ -2609,13 +2609,17 @@ kiblnd_rejected (kib_conn_t *conn, int reason, void 
*priv, int priv_nob)
 
case IBLND_REJECT_MSG_QUEUE_SIZE:
CERROR("%s rejected: incompatible message queue 
depth %d, %d\n",
-  libcfs_nid2str(peer->ibp_nid), 
cp->ibcp_queue_depth,
+  libcfs_nid2str(peer->ibp_nid),
+  cp != NULL ? cp->ibcp_queue_depth :
+  IBLND_MSG_QUEUE_SIZE(rej->ibr_version),
   IBLND_MSG_QUEUE_SIZE(conn->ibc_version));
break;
 
case IBLND_REJECT_RDMA_FRAGS:
CERROR("%s rejected: incompatible # of RDMA 
fragments %d, %d\n",
-  libcfs_nid2str(peer->ibp_nid), 
cp->ibcp_max_frags,
+  libcfs_nid2str(peer->ibp_nid),
+  cp != NULL ? cp->ibcp_max_frags :
+  IBLND_RDMA_FRAGS(rej->ibr_version),
   IBLND_RDMA_FRAGS(conn->ibc_version));
break;
 
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c 
b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
index 21d36ee..516f623 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
@@ -829,14 +829,14 @@ ksocknal_select_ips(ksock_peer_t *peer, __u32 *peerips, 
int n_peerips)
best_npeers = iface->ksni_npeers;
}
 
+   LASSERT(best_iface != NULL);
+
best_iface->ksni_npeers++;
ip = best_iface->ksni_ipaddr;
peer->ksnp_passive_ips[i] = ip;
peer->ksnp_n_passive_ips = i+1;
}
 
-   LASSERT (best_iface != NULL);
-
/* mark the best matching peer IP used */
j = ksocknal_match_peerip(best_iface, peerips, n_peerips);
peerips[j] = 0;
diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c 
b/drivers/staging/lustre/lnet/lnet/api-ni.c
index 3f3c341..f5a9ae3 100644
--- a/drivers/staging/lustre/lnet/lnet/api-ni.c
+++ b/drivers/staging/lustre/lnet/lnet/api-ni.c
@@ -127,8 +127,7 @@ lnet_create_remote_nets_table(void)
 static void
 lnet_destroy_remote_nets_table(void)
 {
-   int i;
-   struct list_head*hash;
+   int i;
 
if (the_lnet.ln_remote_nets_hash == NULL)
return;
@@ -137,7 +136,8 @@ lnet_destroy_remote_nets_table(void)
LASSERT(list_empty(&the_lnet.ln_remote_nets_hash[i]));
 
LIBCFS_FREE(the_lnet.ln_remote_nets_hash,
-   LNET_REMOTE_NETS_HASH_SIZE * sizeof(*hash));
+   LNET_REMOTE_NETS_HASH_SIZE *
+   sizeof(the_lnet.ln_remote_nets_hash[0]));
the_lnet.ln_remote_nets_hash = NULL;
 }
 
diff --git a/drivers/staging/lustre/lnet/lnet/router.c 
b/drivers/staging/lustre/lnet/lnet/router.c
index 995f509..ba0278e 100644
--- a/drivers/staging/lustre/lnet/lnet/router.c
+++ b/drivers/staging/lustre/lnet/lnet/router.c
@@ -1559,7 +1559,8 @@ lnet_notify(lnet_ni_t *ni, lnet_nid_t nid, int alive, 

Re: [PATCH 29/47] staging/lustre/lnet: lnet: fix issues found by Klocwork Insight tool

2014-04-27 Thread Greg Kroah-Hartman
On Sun, Apr 27, 2014 at 01:06:53PM -0400, Oleg Drokin wrote:
> From: Dmitry Eremin 
> 
> Null pointer 'cp' that comes from line 2544 may be dereferenced
> at line 2618.
> 
> Pointer 'ni' checked for NULL at line 1569 may be passed to
> function and may be dereferenced there by passing argument 1 to
> function 'lnet_ni_notify_locked' at line 1621.
> 
> Null pointer 'best_iface' that comes from line 802 may be
> dereferenced at line 832.
> 
> Buffer overflow of string buffer due to non null terminated string.
> 
> Pointer 'tsc' returned from call to function 'sfw_find_test_case'
> at line 571 may be NULL and will be dereferenced at line 572.
> 
> Local variable 'hash' is never used.

Each kernel patch should only do one thing, not 6 different things.
Please break this up into 6 different patches.

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel