diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c
index 55836d7afa70d0b84ebdf8081c0cc4e72bf96b19..865d115d4828bac23a748864351bb93d3206307c 100644
--- a/lustre/utils/lustre_cfg.c
+++ b/lustre/utils/lustre_cfg.c
@@ -548,8 +548,8 @@ int jt_lcfg_getparam(int argc, char **argv)
 {
         int fp;
         int rc = 0, i, show_path = 0;
-        char buf[CFS_PAGE_SIZE] = {'\0'}, pattern[PATH_MAX];
-        char *path, *tmp;
+        char pattern[PATH_MAX];
+        char *path, *tmp, *buf;
         glob_t glob_info;
 
         if (argc == 3 && strcmp(argv[1], "-n") == 0) {
@@ -587,8 +587,11 @@ int jt_lcfg_getparam(int argc, char **argv)
                 return rc;
         }
 
+        buf = malloc(CFS_PAGE_SIZE);
         for (i = 0; i  < glob_info.gl_pathc; i++) {
                 char *valuename = NULL;
+
+                memset(buf, 0, CFS_PAGE_SIZE);
                 if (show_path) {
                         char *filename;
                         filename = strdup(glob_info.gl_pathv[i]);
@@ -605,7 +608,7 @@ int jt_lcfg_getparam(int argc, char **argv)
                 }
 
                 do {
-                        rc = read(fp, buf, sizeof(buf));
+                        rc = read(fp, buf, CFS_PAGE_SIZE);
                         if (rc == 0)
                                 break;
                         if (rc < 0) {
@@ -634,11 +637,11 @@ int jt_lcfg_getparam(int argc, char **argv)
                                 break;
                         }
                 } while (1);
-                memset(buf, 0, sizeof(buf));
                 close(fp);
         }
 
         globfree(&glob_info);
+        free(buf);
         return rc;
 }