From c9b7c33ed0b10609d67763b4b817db274d107b8d Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Sat, 3 Jun 2017 23:35:07 +0200 Subject: [PATCH] tree-wide: log function called in userns_exec_1() Signed-off-by: Christian Brauner --- src/lxc/bdev/bdev.c | 2 +- src/lxc/bdev/lxcaufs.c | 3 ++- src/lxc/bdev/lxcbtrfs.c | 3 ++- src/lxc/bdev/lxcoverlay.c | 3 ++- src/lxc/cgroups/cgfs.c | 6 ++++-- src/lxc/cgroups/cgfsng.c | 5 +++-- src/lxc/cgroups/cgmanager.c | 3 ++- src/lxc/conf.c | 7 ++++++- src/lxc/conf.h | 3 ++- src/lxc/lxccontainer.c | 8 +++++--- src/lxc/start.c | 6 ++++-- 11 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/lxc/bdev/bdev.c b/src/lxc/bdev/bdev.c index 3526ed540..b1193f57a 100644 --- a/src/lxc/bdev/bdev.c +++ b/src/lxc/bdev/bdev.c @@ -437,7 +437,7 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname, data.orig = orig; data.new = new; if (am_unpriv()) - ret = userns_exec_1(c0->lxc_conf, rsync_rootfs_wrapper, &data); + ret = userns_exec_1(c0->lxc_conf, rsync_rootfs_wrapper, &data, "rsync_rootfs_wrapper"); else ret = rsync_rootfs(&data); diff --git a/src/lxc/bdev/lxcaufs.c b/src/lxc/bdev/lxcaufs.c index 01529669e..fd5e97503 100644 --- a/src/lxc/bdev/lxcaufs.c +++ b/src/lxc/bdev/lxcaufs.c @@ -133,7 +133,8 @@ int aufs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, rdata.src = odelta; rdata.dest = ndelta; if (am_unpriv()) - ret = userns_exec_1(conf, rsync_delta_wrapper, &rdata); + ret = userns_exec_1(conf, rsync_delta_wrapper, &rdata, + "rsync_delta_wrapper"); else ret = rsync_delta(&rdata); if (ret) { diff --git a/src/lxc/bdev/lxcbtrfs.c b/src/lxc/bdev/lxcbtrfs.c index 7879d718b..74edc6793 100644 --- a/src/lxc/bdev/lxcbtrfs.c +++ b/src/lxc/bdev/lxcbtrfs.c @@ -398,7 +398,8 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, return btrfs_snapshot(orig->dest, new->dest); sdata.dest = new->dest; sdata.src = orig->dest; - return userns_exec_1(conf, btrfs_snapshot_wrapper, &sdata); + return userns_exec_1(conf, btrfs_snapshot_wrapper, &sdata, + "btrfs_snapshot_wrapper"); } if (rmdir(new->dest) < 0 && errno != ENOENT) { diff --git a/src/lxc/bdev/lxcoverlay.c b/src/lxc/bdev/lxcoverlay.c index e8d0f6d30..65daed8db 100644 --- a/src/lxc/bdev/lxcoverlay.c +++ b/src/lxc/bdev/lxcoverlay.c @@ -750,7 +750,8 @@ static int ovl_do_rsync(struct bdev *orig, struct bdev *new, struct lxc_conf *co rdata.orig = orig; rdata.new = new; if (am_unpriv()) - ret = userns_exec_1(conf, ovl_rsync_wrapper, &rdata); + ret = userns_exec_1(conf, ovl_rsync_wrapper, &rdata, + "ovl_rsync_wrapper"); else ret = ovl_rsync(&rdata); if (ret) diff --git a/src/lxc/cgroups/cgfs.c b/src/lxc/cgroups/cgfs.c index 3bfa52397..4528821ec 100644 --- a/src/lxc/cgroups/cgfs.c +++ b/src/lxc/cgroups/cgfs.c @@ -1874,7 +1874,8 @@ static int create_or_remove_cgroup(bool do_remove, return 0; if (recurse) { if (conf && !lxc_list_empty(&conf->id_map)) - r = userns_exec_1(conf, rmdir_wrapper, buf); + r = userns_exec_1(conf, rmdir_wrapper, buf, + "rmdir_wrapper"); else r = cgroup_rmdir(buf); } else @@ -2616,7 +2617,8 @@ static bool do_cgfs_chown(char *cgroup_path, struct lxc_conf *conf) /* Unpriv users can't chown it themselves, so chown from * a child namespace mapping both our own and the target uid */ - if (userns_exec_1(conf, chown_cgroup_wrapper, &data) < 0) { + if (userns_exec_1(conf, chown_cgroup_wrapper, &data, + "chown_cgroup_wrapper") < 0) { ERROR("Error requesting cgroup chown in new namespace"); return false; } diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 7c627229e..fd71c106d 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -1284,7 +1284,7 @@ void recursive_destroy(char *path, struct lxc_conf *conf) { int r; if (conf && !lxc_list_empty(&conf->id_map)) - r = userns_exec_1(conf, rmdir_wrapper, path); + r = userns_exec_1(conf, rmdir_wrapper, path, "rmdir_wrapper"); else r = cgroup_rmdir(path); @@ -1507,7 +1507,8 @@ static bool cgfsns_chown(void *hdata, struct lxc_conf *conf) wrap.d = d; wrap.origuid = geteuid(); - if (userns_exec_1(conf, chown_cgroup_wrapper, &wrap) < 0) { + if (userns_exec_1(conf, chown_cgroup_wrapper, &wrap, + "chown_cgroup_wrapper") < 0) { ERROR("Error requesting cgroup chown in new namespace"); return false; } diff --git a/src/lxc/cgroups/cgmanager.c b/src/lxc/cgroups/cgmanager.c index f2756b07f..6917d3c05 100644 --- a/src/lxc/cgroups/cgmanager.c +++ b/src/lxc/cgroups/cgmanager.c @@ -497,7 +497,8 @@ static bool chown_cgroup(const char *cgroup_path, struct lxc_conf *conf) /* Unpriv users can't chown it themselves, so chown from * a child namespace mapping both our own and the target uid */ - if (userns_exec_1(conf, chown_cgroup_wrapper, &data) < 0) { + if (userns_exec_1(conf, chown_cgroup_wrapper, &data, + "chown_cgroup_wrapper") < 0) { ERROR("Error requesting cgroup chown in new namespace"); return false; } diff --git a/src/lxc/conf.c b/src/lxc/conf.c index f5357d51b..2490e5cf6 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -4669,6 +4669,7 @@ void lxc_conf_free(struct lxc_conf *conf) struct userns_fn_data { int (*fn)(void *); + const char *fn_name; void *arg; int p[2]; }; @@ -4690,6 +4691,8 @@ static int run_userns_fn(void *data) /* Close read end of the pipe. */ close(d->p[0]); + if (d->fn_name) + TRACE("calling function \"%s\"", d->fn_name); /* Call function to run. */ return d->fn(d->arg); } @@ -4767,7 +4770,8 @@ static struct id_map *idmap_add(struct lxc_conf *conf, uid_t id, enum idtype typ * retrieve from the ontainer's configured {g,u}id mappings as it must have been * there to start the container in the first place. */ -int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data) +int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, + const char *fn_name) { pid_t pid; uid_t euid, egid; @@ -4787,6 +4791,7 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data) return -1; } d.fn = fn; + d.fn_name = fn_name; d.arg = data; d.p[0] = p[0]; d.p[1] = p[1]; diff --git a/src/lxc/conf.h b/src/lxc/conf.h index 9033a1a53..d8d5a6aea 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -473,7 +473,8 @@ extern int find_unmapped_nsid(struct lxc_conf *conf, enum idtype idtype); extern int mapped_hostid(unsigned id, struct lxc_conf *conf, enum idtype idtype); extern int chown_mapped_root(char *path, struct lxc_conf *conf); extern int ttys_shift_ids(struct lxc_conf *c); -extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data); +extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, + const char *fn_name); extern int parse_mntopts(const char *mntopts, unsigned long *mntflags, char **mntdata); extern void tmp_proc_unmount(struct lxc_conf *lxc_conf); diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index f93fdfc95..ebed82bc1 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2339,7 +2339,8 @@ static bool has_snapshots(struct lxc_container *c) static bool do_destroy_container(struct lxc_conf *conf) { if (am_unpriv()) { - if (userns_exec_1(conf, bdev_destroy_wrapper, conf) < 0) + if (userns_exec_1(conf, bdev_destroy_wrapper, conf, + "bdev_destroy_wrapper") < 0) return false; return true; } @@ -2421,7 +2422,8 @@ static bool container_destroy(struct lxc_container *c) char *path = alloca(strlen(p1) + strlen(c->name) + 2); sprintf(path, "%s/%s", p1, c->name); if (am_unpriv()) - ret = userns_exec_1(conf, lxc_rmdir_onedev_wrapper, path); + ret = userns_exec_1(conf, lxc_rmdir_onedev_wrapper, path, + "lxc_rmdir_onedev_wrapper"); else ret = lxc_rmdir_onedev(path, "snaps"); if (ret < 0) { @@ -3230,7 +3232,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char data.hookargs = hookargs; if (am_unpriv()) ret = userns_exec_1(c->lxc_conf, clone_update_rootfs_wrapper, - &data); + &data, "clone_update_rootfs_wrapper"); else ret = clone_update_rootfs(&data); if (ret < 0) diff --git a/src/lxc/start.c b/src/lxc/start.c index 36f8b2318..6d932038d 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1541,7 +1541,8 @@ static void lxc_destroy_container_on_signal(struct lxc_handler *handler, } if (am_unpriv()) - ret = userns_exec_1(handler->conf, lxc_rmdir_onedev_wrapper, destroy); + ret = userns_exec_1(handler->conf, lxc_rmdir_onedev_wrapper, + destroy, "lxc_rmdir_onedev_wrapper"); else ret = lxc_rmdir_onedev(destroy, NULL); @@ -1560,7 +1561,8 @@ static int lxc_rmdir_onedev_wrapper(void *data) static bool do_destroy_container(struct lxc_conf *conf) { if (am_unpriv()) { - if (userns_exec_1(conf, bdev_destroy_wrapper, conf) < 0) + if (userns_exec_1(conf, bdev_destroy_wrapper, conf, + "bdev_destroy_wrapper") < 0) return false; return true; } -- 2.39.5