From 19535757440c00b92b9081a3a8a6ae3b7ae60396 Mon Sep 17 00:00:00 2001 From: Dmitry Eremin Date: Tue, 29 Mar 2016 18:09:47 +0300 Subject: [PATCH] LU-7937 utils: Fix NULL pointer dereference Check the error of malloc() function and handle it properly. Change-Id: I2763d1b6d9c97c137a2593077ee31eaa3758ad81 Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/19194 Tested-by: Jenkins Reviewed-by: Bob Glossman Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/utils/lustre_cfg.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c index 23ca708..19fdf66 100644 --- a/lustre/utils/lustre_cfg.c +++ b/lustre/utils/lustre_cfg.c @@ -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 "=\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; } /** -- 1.8.3.1