Skip to content

Commit

Permalink
tree-wide: s/strncpy()/strlcpy()/g
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed May 11, 2018
1 parent 91c272a commit 9de31d5
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 30 deletions.
14 changes: 10 additions & 4 deletions src/lxc/af_unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@
#include "log.h"
#include "utils.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

lxc_log_define(lxc_af_unix, lxc);

int lxc_abstract_unix_open(const char *path, int type, int flags)
Expand Down Expand Up @@ -63,8 +67,9 @@ int lxc_abstract_unix_open(const char *path, int type, int flags)
errno = ENAMETOOLONG;
return -1;
}
/* addr.sun_path[0] has already been set to 0 by memset() */
strncpy(&addr.sun_path[1], &path[1], len);

/* do not enforce \0-termination */
memcpy(&addr.sun_path[1], &path[1], len);

ret = bind(fd, (struct sockaddr *)&addr,
offsetof(struct sockaddr_un, sun_path) + len + 1);
Expand Down Expand Up @@ -116,8 +121,9 @@ int lxc_abstract_unix_connect(const char *path)
errno = ENAMETOOLONG;
return -1;
}
/* addr.sun_path[0] has already been set to 0 by memset() */
strncpy(&addr.sun_path[1], &path[1], strlen(&path[1]));

/* do not enforce \0-termination */
memcpy(&addr.sun_path[1], &path[1], len);

ret = connect(fd, (struct sockaddr *)&addr,
offsetof(struct sockaddr_un, sun_path) + len + 1);
Expand Down
9 changes: 7 additions & 2 deletions src/lxc/criu.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@
#include <mntent.h>
#endif

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

#define CRIU_VERSION "2.0"

#define CRIU_GITID_VERSION "2.0"
Expand Down Expand Up @@ -536,6 +540,7 @@ static void exec_criu(struct criu_opts *opts)
argv = m;

lxc_list_for_each(it, &opts->c->lxc_conf->network) {
size_t retlen;
char eth[128], *veth;
char *fmt;
struct lxc_netdev *n = it->elem;
Expand All @@ -552,9 +557,9 @@ static void exec_criu(struct criu_opts *opts)
}

if (n->name[0] != '\0') {
if (strlen(n->name) >= sizeof(eth))
retlen = strlcpy(eth, n->name, sizeof(eth));
if (retlen >= sizeof(eth))
goto err;
strncpy(eth, n->name, sizeof(eth));
} else {
ret = snprintf(eth, sizeof(eth), "eth%d", netnr);
if (ret < 0 || ret >= sizeof(eth))
Expand Down
8 changes: 6 additions & 2 deletions src/lxc/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
#include "utils.h"
#include "lxccontainer.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

/* We're logging in seconds and nanoseconds. Assuming that the underlying
* datatype is currently at maximum a 64bit integer, we have a date string that
* is of maximum length (2^64 - 1) * 2 = (21 + 21) = 42.
Expand Down Expand Up @@ -690,8 +694,8 @@ extern const char *lxc_log_get_file(void)

extern void lxc_log_set_prefix(const char *prefix)
{
strncpy(log_prefix, prefix, sizeof(log_prefix));
log_prefix[sizeof(log_prefix) - 1] = 0;
/* We don't care if thte prefix is truncated. */
(void)strlcpy(log_prefix, prefix, sizeof(log_prefix));
}

extern const char *lxc_log_get_prefix(void)
Expand Down
12 changes: 9 additions & 3 deletions src/lxc/lxccontainer.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@
#include <mntent.h>
#endif

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

/* Define faccessat() if missing from the C library */
#ifndef HAVE_FACCESSAT
static int faccessat(int __fd, const char *__file, int __type, int __flag)
Expand Down Expand Up @@ -728,7 +732,7 @@ static void push_arg(char ***argp, char *arg, int *nargs)

static char **split_init_cmd(const char *incmd)
{
size_t len;
size_t len, retlen;
char *copy, *p;
char **argv;
int nargs = 0;
Expand All @@ -739,8 +743,10 @@ static char **split_init_cmd(const char *incmd)

len = strlen(incmd) + 1;
copy = alloca(len);
strncpy(copy, incmd, len);
copy[len - 1] = '\0';
retlen = strlcpy(copy, incmd, len);
if (retlen >= len) {
return NULL;
}

do {
argv = malloc(sizeof(char *));
Expand Down
10 changes: 6 additions & 4 deletions src/lxc/monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@
#include "state.h"
#include "utils.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

lxc_log_define(lxc_monitor, lxc);

/* routines used by monitor publishers (containers) */
Expand Down Expand Up @@ -131,19 +135,17 @@ void lxc_monitor_send_state(const char *name, lxc_state_t state,
const char *lxcpath)
{
struct lxc_msg msg = {.type = lxc_msg_state, .value = state};
strncpy(msg.name, name, sizeof(msg.name));
msg.name[sizeof(msg.name) - 1] = 0;

(void)strlcpy(msg.name, name, sizeof(msg.name));
lxc_monitor_fifo_send(&msg, lxcpath);
}

void lxc_monitor_send_exit_code(const char *name, int exit_code,
const char *lxcpath)
{
struct lxc_msg msg = {.type = lxc_msg_exit_code, .value = exit_code};
strncpy(msg.name, name, sizeof(msg.name));
msg.name[sizeof(msg.name) - 1] = 0;

(void)strlcpy(msg.name, name, sizeof(msg.name));
lxc_monitor_fifo_send(&msg, lxcpath);
}

Expand Down
19 changes: 16 additions & 3 deletions src/lxc/network.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
#include <../include/ifaddrs.h>
#endif

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

#ifndef IFLA_LINKMODE
#define IFLA_LINKMODE 17
#endif
Expand Down Expand Up @@ -1894,6 +1898,7 @@ static int lxc_ovs_attach_bridge(const char *bridge, const char *nic)
int lxc_bridge_attach(const char *bridge, const char *ifname)
{
int err, fd, index;
size_t retlen;
struct ifreq ifr;

if (strlen(ifname) >= IFNAMSIZ)
Expand All @@ -1910,7 +1915,10 @@ int lxc_bridge_attach(const char *bridge, const char *ifname)
if (fd < 0)
return -errno;

strncpy(ifr.ifr_name, bridge, IFNAMSIZ - 1);
retlen = strlcpy(ifr.ifr_name, bridge, IFNAMSIZ);
if (retlen >= IFNAMSIZ)
return -E2BIG;

ifr.ifr_name[IFNAMSIZ - 1] = '\0';
ifr.ifr_ifindex = index;
err = ioctl(fd, SIOCBRADDIF, &ifr);
Expand Down Expand Up @@ -2113,6 +2121,7 @@ static int lxc_create_network_unpriv_exec(const char *lxcpath, const char *lxcna

if (child == 0) {
int ret;
size_t retlen;
char pidstr[LXC_NUMSTRLEN64];

close(pipefd[0]);
Expand All @@ -2127,9 +2136,13 @@ static int lxc_create_network_unpriv_exec(const char *lxcpath, const char *lxcna
}

if (netdev->link[0] != '\0')
strncpy(netdev_link, netdev->link, IFNAMSIZ - 1);
retlen = strlcpy(netdev_link, netdev->link, IFNAMSIZ);
else
strncpy(netdev_link, "none", IFNAMSIZ - 1);
retlen = strlcpy(netdev_link, "none", IFNAMSIZ);
if (retlen >= IFNAMSIZ) {
SYSERROR("Invalid network device name");
_exit(EXIT_FAILURE);
}

ret = snprintf(pidstr, LXC_NUMSTRLEN64, "%d", pid);
if (ret < 0 || ret >= LXC_NUMSTRLEN64)
Expand Down
10 changes: 8 additions & 2 deletions src/lxc/start.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@
#include "terminal.h"
#include "utils.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

lxc_log_define(lxc_start, lxc);

extern void mod_all_rdeps(struct lxc_container *c, bool inc);
Expand Down Expand Up @@ -410,6 +414,7 @@ static int signal_handler(int fd, uint32_t events, void *data,
int lxc_serve_state_clients(const char *name, struct lxc_handler *handler,
lxc_state_t state)
{
size_t retlen;
ssize_t ret;
struct lxc_list *cur, *next;
struct lxc_state_client *client;
Expand All @@ -427,8 +432,9 @@ int lxc_serve_state_clients(const char *name, struct lxc_handler *handler,
return 0;
}

strncpy(msg.name, name, sizeof(msg.name));
msg.name[sizeof(msg.name) - 1] = 0;
retlen = strlcpy(msg.name, name, sizeof(msg.name));
if (retlen >= sizeof(msg.name))
return -E2BIG;

lxc_list_for_each_safe(cur, &handler->conf->state_clients, next) {
client = cur->elem;
Expand Down
34 changes: 25 additions & 9 deletions src/lxc/storage/btrfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
#include "storage.h"
#include "utils.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

lxc_log_define(btrfs, lxc);

/*
Expand Down Expand Up @@ -223,6 +227,7 @@ int btrfs_umount(struct lxc_storage *bdev)
static int btrfs_subvolume_create(const char *path)
{
int ret, saved_errno;
size_t retlen;
struct btrfs_ioctl_vol_args args;
char *p, *newfull;
int fd = -1;
Expand All @@ -248,8 +253,9 @@ static int btrfs_subvolume_create(const char *path)
}

memset(&args, 0, sizeof(args));
strncpy(args.name, p + 1, BTRFS_SUBVOL_NAME_MAX);
args.name[BTRFS_SUBVOL_NAME_MAX - 1] = 0;
retlen = strlcpy(args.name, p + 1, BTRFS_SUBVOL_NAME_MAX);
if (retlen >= BTRFS_SUBVOL_NAME_MAX)
return -E2BIG;

ret = ioctl(fd, BTRFS_IOC_SUBVOL_CREATE, &args);
saved_errno = errno;
Expand Down Expand Up @@ -303,6 +309,7 @@ int btrfs_same_fs(const char *orig, const char *new)

int btrfs_snapshot(const char *orig, const char *new)
{
size_t retlen;
struct btrfs_ioctl_vol_args_v2 args;
char *newdir, *newname;
char *newfull = NULL;
Expand All @@ -328,9 +335,9 @@ int btrfs_snapshot(const char *orig, const char *new)
goto out;

memset(&args, 0, sizeof(args));
args.fd = fd;
strncpy(args.name, newname, BTRFS_SUBVOL_NAME_MAX);
args.name[BTRFS_SUBVOL_NAME_MAX - 1] = 0;
retlen = strlcpy(args.name, newname, BTRFS_SUBVOL_NAME_MAX);
if (retlen >= BTRFS_SUBVOL_NAME_MAX)
goto out;

ret = ioctl(fddst, BTRFS_IOC_SNAP_CREATE_V2, &args);
saved_errno = errno;
Expand Down Expand Up @@ -498,6 +505,7 @@ bool btrfs_create_snapshot(struct lxc_conf *conf, struct lxc_storage *orig,
static int btrfs_do_destroy_subvol(const char *path)
{
int ret, fd = -1;
size_t retlen;
struct btrfs_ioctl_vol_args args;
char *p, *newfull = strdup(path);

Expand All @@ -522,8 +530,12 @@ static int btrfs_do_destroy_subvol(const char *path)
}

memset(&args, 0, sizeof(args));
strncpy(args.name, p+1, BTRFS_SUBVOL_NAME_MAX);
args.name[BTRFS_SUBVOL_NAME_MAX-1] = 0;
retlen = strlcpy(args.name, p+1, BTRFS_SUBVOL_NAME_MAX);
if (retlen >= BTRFS_SUBVOL_NAME_MAX) {
free(newfull);
return -E2BIG;
}

ret = ioctl(fd, BTRFS_IOC_SNAP_DESTROY, &args);
INFO("btrfs: snapshot destroy ioctl returned %d for %s", ret, path);
if (ret < 0 && errno == EPERM)
Expand Down Expand Up @@ -577,21 +589,25 @@ static bool update_tree_node(struct mytree_node *n, u64 id, u64 parent,
{
if (id)
n->objid = id;

if (parent)
n->parentid = parent;

if (name) {
n->name = malloc(name_len + 1);
if (!n->name)
return false;
strncpy(n->name, name, name_len);
n->name[name_len] = '\0';

strcpy(n->name, name);
}

if (dirname) {
n->dirname = malloc(strlen(dirname) + 1);
if (!n->dirname) {
free(n->name);
return false;
}

strcpy(n->dirname, dirname);
}
return true;
Expand Down
12 changes: 11 additions & 1 deletion src/lxc/storage/storage_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
#include "storage_utils.h"
#include "utils.h"

#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
#endif

#ifndef BLKGETSIZE64
#define BLKGETSIZE64 _IOR(0x12, 114, size_t)
#endif
Expand Down Expand Up @@ -85,15 +89,21 @@ char *dir_new_path(char *src, const char *oldname, const char *name,
}

while ((p2 = strstr(src, oldname)) != NULL) {
size_t retlen;

/* copy text up to oldname */
strncpy(p, src, p2 - src);
retlen = strlcpy(p, src, p2 - src);
if (retlen >= p2 - src)
return NULL;

/* move target pointer (p) */
p += p2 - src;
/* print new name in place of oldname */
p += sprintf(p, "%s", name);
/* move src to end of oldname */
src = p2 + l2;
}

/* copy the rest of src */
sprintf(p, "%s", src);
return ret;
Expand Down

0 comments on commit 9de31d5

Please sign in to comment.