]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
secure coding: strcat => strncat
authorDonghwa Jeong <dh48.jeong@samsung.com>
Wed, 20 Jun 2018 05:52:42 +0000 (14:52 +0900)
committerDonghwa Jeong <dh48.jeong@samsung.com>
Fri, 22 Jun 2018 05:10:46 +0000 (14:10 +0900)
Signed-off-by: Donghwa Jeong <dh48.jeong@samsung.com>
src/lxc/conf.c
src/lxc/confile.c
src/lxc/pam/pam_cgfs.c
src/lxc/pam/utils.c
src/lxc/tools/tool_utils.c
src/lxc/utils.c

index f37e526356532126995a02762dce209bc4c37aea..2aff0530017fe4d6cc175fed84bc88df58d3cb34 100644 (file)
@@ -856,8 +856,8 @@ static bool append_ttyname(char **pp, char *name)
                return false;
 
        *pp = p;
-       strcat(p, " ");
-       strcat(p, name);
+       strncat(p, " ", 1);
+       strncat(p, name, strlen(name));
 
        return true;
 }
@@ -1788,9 +1788,10 @@ static int lxc_setup_console(const struct lxc_rootfs *rootfs,
        return lxc_setup_ttydir_console(rootfs, console, ttydir);
 }
 
-static void parse_mntopt(char *opt, unsigned long *flags, char **data)
+static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t size)
 {
        struct mount_opt *mo;
+       size_t cursize;
 
        /* If opt is found in mount_opt, set or clear flags.
         * Otherwise append it to data. */
@@ -1805,15 +1806,23 @@ static void parse_mntopt(char *opt, unsigned long *flags, char **data)
                }
        }
 
-       if (strlen(*data))
-               strcat(*data, ",");
-       strcat(*data, opt);
+       cursize = strlen(*data);
+       if (cursize)
+               cursize += 1;
+
+       if (size - cursize > 1) {
+               if (cursize)
+                       strncat(*data, ",", 1);
+
+               strncat(*data, opt, size - cursize - 1);
+       }
 }
 
 int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata)
 {
        char *data, *p, *s;
        char *saveptr = NULL;
+       size_t size;
 
        *mntdata = NULL;
        *mntflags = 0L;
@@ -1825,7 +1834,8 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata)
        if (!s)
                return -1;
 
-       data = malloc(strlen(s) + 1);
+       size = strlen(s) + 1;
+       data = malloc(size);
        if (!data) {
                free(s);
                return -1;
@@ -1833,7 +1843,7 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata)
        *data = 0;
 
        for (; (p = strtok_r(s, ",", &saveptr)); s = NULL)
-               parse_mntopt(p, mntflags, &data);
+               parse_mntopt(p, mntflags, &data, size);
 
        if (*data)
                *mntdata = data;
index 82ee093fd0f9aab34b00e0368ffe7b28d844f835..593986510265993549d6209bef9485cb15acd906 100644 (file)
@@ -2060,10 +2060,11 @@ int append_unexp_config_line(const char *line, struct lxc_conf *conf)
                conf->unexpanded_config = tmp;
                conf->unexpanded_alloced += 1024;
        }
-       strcat(conf->unexpanded_config, line);
+
+       strncat(conf->unexpanded_config, line, linelen);
        conf->unexpanded_len += linelen;
        if (line[linelen - 1] != '\n') {
-               strcat(conf->unexpanded_config, "\n");
+               strncat(conf->unexpanded_config, "\n", 1);
                conf->unexpanded_len++;
        }
 
index 359da9223bcc68e532b2b6c40377a1ea5905ef69..0abcc286d72d7038d1f8408f6995a20d3590f6f0 100644 (file)
@@ -1634,8 +1634,8 @@ static char *string_join(const char *sep, const char **parts, bool use_as_prefix
 
        for (p = (char **)parts; *p; p++) {
                if (p > (char **)parts)
-                       strcat(result, sep);
-               strcat(result, *p);
+                       strncat(result, sep, sep_len);
+               strncat(result, *p, strlen(*p));
        }
 
        return result;
index 034f4ce3eca4f0d93b2c814cbec048e8e8fbf596..93643bbb1b7a6386270360c6322ead60cb6fc6c6 100644 (file)
@@ -77,10 +77,12 @@ char *must_make_path(const char *first, ...)
                full_len += strlen(cur);
                if (cur[0] != '/')
                        full_len++;
+
                dest = must_realloc(dest, full_len + 1);
+
                if (cur[0] != '/')
-                       strcat(dest, "/");
-               strcat(dest, cur);
+                       strncat(dest, "/", 1);
+               strncat(dest, cur, strlen(cur));
        }
        va_end(args);
 
index e6ffb9748477ac980440dc68f816d8c825bfad29..594e9ae22be7668086b0961a87a2d996bf8e16c4 100644 (file)
@@ -517,8 +517,8 @@ char *lxc_string_join(const char *sep, const char **parts, bool use_as_prefix)
 
        for (p = (char **)parts; *p; p++) {
                if (p > (char **)parts)
-                       strcat(result, sep);
-               strcat(result, *p);
+                       strncat(result, sep, sep_len);
+               strncat(result, *p, strlen(*p));
        }
 
        return result;
@@ -1079,10 +1079,12 @@ char *must_make_path(const char *first, ...)
                full_len += strlen(cur);
                if (cur[0] != '/')
                        full_len++;
+
                dest = must_realloc(dest, full_len + 1);
+
                if (cur[0] != '/')
-                       strcat(dest, "/");
-               strcat(dest, cur);
+                       strncat(dest, "/", 1);
+               strncat(dest, cur, strlen(cur));
        }
        va_end(args);
 
index 1319025a1ba21758f376ce7678b1cbe0efa6d0db..56e59af0958bca497577dc0c129c2abc42925243 100644 (file)
@@ -649,8 +649,8 @@ char *lxc_string_join(const char *sep, const char **parts, bool use_as_prefix)
 
        for (p = (char **)parts; *p; p++) {
                if (p > (char **)parts)
-                       strcat(result, sep);
-               strcat(result, *p);
+                       strncat(result, sep, sep_len);
+               strncat(result, *p, strlen(*p));
        }
 
        return result;
@@ -2318,10 +2318,12 @@ char *must_make_path(const char *first, ...)
                full_len += strlen(cur);
                if (cur[0] != '/')
                        full_len++;
+
                dest = must_realloc(dest, full_len + 1);
+
                if (cur[0] != '/')
-                       strcat(dest, "/");
-               strcat(dest, cur);
+                       strncat(dest, "/", 1);
+               strncat(dest, cur, strlen(cur));
        }
        va_end(args);
 
@@ -2339,16 +2341,14 @@ char *must_append_path(char *first, ...)
        va_start(args, first);
        while ((cur = va_arg(args, char *)) != NULL) {
                full_len += strlen(cur);
-
                if (cur[0] != '/')
                        full_len++;
 
                dest = must_realloc(dest, full_len + 1);
 
                if (cur[0] != '/')
-                       strcat(dest, "/");
-
-               strcat(dest, cur);
+                       strncat(dest, "/", 1);
+               strncat(dest, cur, strlen(cur));
        }
        va_end(args);