staging: lustre: lnet: klnds: o2iblnd: fix null dereference on failed path in o2iblnd.c
authorJiayi Ye <yejiayily@gmail.com>
Sat, 25 Oct 2014 03:40:32 +0000 (11:40 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Oct 2014 10:52:37 +0000 (18:52 +0800)
If net is null and failed path is executed, dereference null may happen.
This patch fixes it. The following Coccinelle semantic patch was used.

@@
expression E, E1;
identifier f;
statement S1,S2,S3;
@@

* if (E == NULL)
{
  ... when != if (E == NULL) S1 else S2
      when != E = E1
* E->f
  ... when any
  return ...;
}
else S3

Signed-off-by: Jiayi Ye <yejiayily@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c

index 045f2beb41d297c448329aef7447ac1698affb1a..bc479a721a609db584e39abec927b1d97e05e2dc 100644 (file)
@@ -3081,7 +3081,7 @@ kiblnd_startup (lnet_ni_t *ni)
        LIBCFS_ALLOC(net, sizeof(*net));
        ni->ni_data = net;
        if (net == NULL)
-               goto failed;
+               goto net_failed;
 
        do_gettimeofday(&tv);
        net->ibn_incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec;
@@ -3147,6 +3147,7 @@ failed:
        if (net->ibn_dev == NULL && ibdev != NULL)
                kiblnd_destroy_dev(ibdev);
 
+net_failed:
        kiblnd_shutdown(ni);
 
        CDEBUG(D_NET, "kiblnd_startup failed\n");