Whamcloud - gitweb
LU-7937 utils: Fix NULL pointer dereference 94/19194/4
authorDmitry Eremin <dmitry.eremin@intel.com>
Tue, 29 Mar 2016 15:09:47 +0000 (18:09 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 22 Apr 2016 15:48:10 +0000 (15:48 +0000)
Check the error of malloc() function and handle it properly.

Change-Id: I2763d1b6d9c97c137a2593077ee31eaa3758ad81
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: http://review.whamcloud.com/19194
Tested-by: Jenkins
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/utils/lustre_cfg.c

index 23ca708..19fdf66 100644 (file)
@@ -569,6 +569,10 @@ static int jt_lcfg_mgsparam2(int argc, char **argv, struct param_opts *popt)
                /* put an '=' on the end in case it doesn't have one */
                if (popt->po_delete && argv[i][len - 1] != '=') {
                        buf = malloc(len + 1);
+                       if (buf == NULL) {
+                               rc = -ENOMEM;
+                               break;
+                       }
                        sprintf(buf, "%s=", argv[i]);
                } else {
                        buf = argv[i];
@@ -638,6 +642,10 @@ int jt_lcfg_mgsparam(int argc, char **argv)
 
                 /* for delete, make it "<param>=\0" */
                 buf = malloc(strlen(argv[optind]) + 2);
+               if (buf == NULL) {
+                       rc = -ENOMEM;
+                       goto out;
+               }
                 /* put an '=' on the end in case it doesn't have one */
                 sprintf(buf, "%s=", argv[optind]);
                 /* then truncate after the first '=' */
@@ -654,16 +662,19 @@ int jt_lcfg_mgsparam(int argc, char **argv)
                rc = -ENOMEM;
        } else {
                rc = lcfg_mgs_ioctl(argv[0], OBD_DEV_ID, lcfg);
+               if (rc < 0)
+                       rc = -errno;
                lustre_cfg_free(lcfg);
        }
-        if (buf)
-                free(buf);
-        if (rc < 0) {
-                fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),
-                        strerror(rc = errno));
-        }
+       if (buf)
+               free(buf);
+out:
+       if (rc < 0) {
+               fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),
+                       strerror(-rc));
+       }
 
-        return rc;
+       return rc;
 }
 
 /**