]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
[PATCH 2/3] cgsnapshot: fix strn* lengths
authorJiri Slaby <jslaby@suse.cz>
Tue, 4 Jan 2011 16:56:39 +0000 (17:56 +0100)
committerBalbir Singh <balbir@linux.vnet.ibm.com>
Wed, 5 Jan 2011 15:32:41 +0000 (21:02 +0530)
The 'n' parameter in strncat stands for how much to copy from src, not
what's dest overall space. So we need to subtract full strlen we have
constructed so far.

Also fix one strncpy where we may pass too much as well as in strncpy.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
src/tools/cgsnapshot.c

index b2239701291c547b7d2a44871699a6cb06f538db..88f2142b2e398174d90e9aa28f26f709d7b28869 100644 (file)
@@ -209,7 +209,7 @@ static int display_permissions(const char *path,
        /* get tasks file statistic */
        strncpy(tasks_path, path, FILENAME_MAX);
        tasks_path[FILENAME_MAX-1] = '\0';
-       strncat(tasks_path, "/tasks", FILENAME_MAX);
+       strncat(tasks_path, "/tasks", FILENAME_MAX - strlen(tasks_path) - 1);
        tasks_path[FILENAME_MAX-1] = '\0';
        ret = stat(tasks_path, &sbt);
        if (ret) {
@@ -332,11 +332,15 @@ static int display_cgroup_data(struct cgroup *group,
                           variable files in the root group to find out
                           whether the variable is writable.
                         */
+                       if (root_path_len >= FILENAME_MAX)
+                               root_path_len = FILENAME_MAX - 1;
                        strncpy(var_path, group_path, root_path_len);
                        var_path[root_path_len] = '\0';
-                       strncat(var_path, "/", FILENAME_MAX);
+                       strncat(var_path, "/", FILENAME_MAX -
+                                       strlen(var_path) - 1);
                        var_path[FILENAME_MAX-1] = '\0';
-                       strncat(var_path, name, FILENAME_MAX);
+                       strncat(var_path, name, FILENAME_MAX -
+                                       strlen(var_path) - 1);
                        var_path[FILENAME_MAX-1] = '\0';
 
                        /* test whether the  write permissions */