From: Donghwa Jeong Date: Mon, 18 Jun 2018 02:30:41 +0000 (+0900) Subject: secure coding: strcpy => strlcpy X-Git-Tag: lxc-2.0.10~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1528b425f11bee08fd02d8cdd95794f0b4ca2f0;p=thirdparty%2Flxc.git secure coding: strcpy => strlcpy Signed-off-by: Donghwa Jeong --- diff --git a/src/lxc/criu.c b/src/lxc/criu.c index bf79f839b..c1816d481 100644 --- a/src/lxc/criu.c +++ b/src/lxc/criu.c @@ -824,7 +824,7 @@ static bool restore_net_info(struct lxc_container *c) if (!lxc_mkifname(template)) goto out_unlock; - strcpy(netdev->priv.veth_attr.veth1, template); + (void)strlcpy(netdev->priv.veth_attr.veth1, template, IFNAMSIZ); } } diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index eca454783..3685dc42a 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -1155,7 +1155,8 @@ static int do_create_container_dir(const char *path, struct lxc_conf *conf) len = strlen(path); p = alloca(len + 1); - strcpy(p, path); + (void)strlcpy(p, path, len + 1); + if (!lxc_list_empty(&conf->id_map)) { ret = chown_mapped_root(p, conf); if (ret < 0) @@ -4444,6 +4445,7 @@ out: struct lxc_container *lxc_container_new(const char *name, const char *configpath) { struct lxc_container *c; + size_t len; if (!name) return NULL; @@ -4466,12 +4468,14 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath } remove_trailing_slashes(c->config_path); - c->name = malloc(strlen(name)+1); + + len = strlen(name); + c->name = malloc(len + 1); if (!c->name) { fprintf(stderr, "Failed to allocate memory for %s\n", name); goto err; } - strcpy(c->name, name); + (void)strlcpy(c->name, name, len + 1); c->numthreads = 1; c->slock = lxc_newlock(c->config_path, name); diff --git a/src/lxc/start.c b/src/lxc/start.c index b5c22e164..a12e2ecfd 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -103,9 +103,11 @@ static void print_top_failing_dir(const char *path) len = strlen(path); copy = alloca(len + 1); - strcpy(copy, path); + (void)strlcpy(copy, path, len + 1); + p = copy; e = copy + len; + while (p < e) { while (p < e && *p == '/') p++; diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c index 511e6a03f..c351bee67 100644 --- a/src/lxc/storage/btrfs.c +++ b/src/lxc/storage/btrfs.c @@ -91,8 +91,8 @@ char *get_btrfs_subvol_path(int fd, u64 dir_id, u64 objid, char *name, retpath = malloc(len); if (!retpath) return NULL; - strcpy(retpath, args.name); - strcat(retpath, "/"); + (void)strlcpy(retpath, args.name, len); + strncat(retpath, "/", 1); strncat(retpath, name, name_len); } else { /* we're at the root of ref_tree */ @@ -521,17 +521,20 @@ static bool update_tree_node(struct mytree_node *n, u64 id, u64 parent, if (!n->name) return false; - strcpy(n->name, name); + (void)strlcpy(n->name, name, name_len + 1); } if (dirname) { - n->dirname = malloc(strlen(dirname) + 1); + size_t len; + + len = strlen(dirname); + n->dirname = malloc(len + 1); if (!n->dirname) { free(n->name); return false; } - strcpy(n->dirname, dirname); + (void)strlcpy(n->dirname, dirname, len + 1); } return true; }