Prevent buffer overflow with sscanf 74/125774/1 accepted/tizen_3.0_common accepted/tizen_3.0_ivi accepted/tizen_3.0_mobile accepted/tizen_3.0_tv accepted/tizen_3.0_wearable tizen_3.0 accepted/tizen/3.0/common/20170510.183012 accepted/tizen/3.0/ivi/20170509.223043 accepted/tizen/3.0/mobile/20170509.223021 accepted/tizen/3.0/tv/20170509.223028 accepted/tizen/3.0/wearable/20170509.223035 accepted/tizen/unified/20170426.195730 submit/tizen/20170426.041441 submit/tizen_3.0-common/20170510.074450 submit/tizen_3.0/20170428.014856 submit/tizen_3.0/20170428.015157 submit/tizen_3.0_common/20170510.075013 tizen_4.0.m1_release
authorHyeongsik Min <hyeongsik.min@samsung.com>
Tue, 18 Apr 2017 15:11:23 +0000 (00:11 +0900)
committerHyeongsik Min <hyeongsik.min@samsung.com>
Tue, 18 Apr 2017 23:29:13 +0000 (08:29 +0900)
By allocating string buffer, prevent buffer overlow issue with sscanf.

Change-Id: I5655f1b7049dc457b525dfbc2d351b67616b3f88
Signed-off-by: Hyeongsik Min <hyeongsik.min@samsung.com>
memps.c

diff --git a/memps.c b/memps.c
index d14774e..e29dd9b 100644 (file)
--- a/memps.c
+++ b/memps.c
@@ -624,7 +624,7 @@ static int get_tmpfs_info(FILE *output_fp)
 {
        FILE *fp;
        char line[BUF_MAX];
-       char tmpfs_mp[NAME_MAX];        /* tmpfs mount point */
+       char *tmpfs_mp; /* tmpfs mount point */
        struct statfs tmpfs_info;
 
        if (output_fp == NULL)
@@ -639,7 +639,7 @@ static int get_tmpfs_info(FILE *output_fp)
        fprintf(output_fp, "TMPFS INFO\n");
 
        while (fgets(line, BUF_MAX, fp) != NULL) {
-               if (sscanf(line, "tmpfs %s tmpfs", tmpfs_mp) == 1) {
+               if (sscanf(line, "tmpfs %ms tmpfs", &tmpfs_mp) == 1) {
                        statfs(tmpfs_mp, &tmpfs_info);
                        fprintf(output_fp,
                                "tmpfs %16s  Total %8ld KB, Used %8ld, Avail %8ld\n",
@@ -648,6 +648,7 @@ static int get_tmpfs_info(FILE *output_fp)
                                tmpfs_info.f_blocks * 4,
                                (tmpfs_info.f_blocks - tmpfs_info.f_bfree) * 4,
                                tmpfs_info.f_bfree * 4);
+                       free(tmpfs_mp);
                }
        }
        fclose(fp);