From: Richard Weinberger Date: Tue, 23 Jun 2015 11:48:42 +0000 (+0200) Subject: virSetUIDGID: Don't leak supplementary groups X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=867f34a6837e05fcd5c2ea4ae8c7d111e3e2f5a4;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git virSetUIDGID: Don't leak supplementary groups The LXC driver uses virSetUIDGID() to become UID/GID 0. It passes an empty groups list to virSetUIDGID() to get rid of all supplementary groups from the host side. But virSetUIDGID() calls setgroups() only if the supplied list is larger than 0. This leads to a container root with unrelated supplementary groups. In most cases this issue is unoticed as libvirtd runs as UID/GID 0 without any supplementary groups. Signed-off-by: Richard Weinberger Signed-off-by: Daniel P. Berrange --- diff --git a/src/util/virutil.c b/src/util/virutil.c index cddc78a70..6f61d6e56 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -1103,7 +1103,7 @@ virSetUIDGID(uid_t uid, gid_t gid, gid_t *groups ATTRIBUTE_UNUSED, } # if HAVE_SETGROUPS - if (ngroups && setgroups(ngroups, groups) < 0) { + if (gid != (gid_t)-1 && setgroups(ngroups, groups) < 0) { virReportSystemError(errno, "%s", _("cannot set supplemental groups")); return -1;