start: avoid unnecessary syscalls

parent ddd51fdb
...@@ -1050,6 +1050,8 @@ static int do_start(void *data) ...@@ -1050,6 +1050,8 @@ static int do_start(void *data)
uid_t new_uid; uid_t new_uid;
gid_t new_gid; gid_t new_gid;
struct lxc_list *iterator; struct lxc_list *iterator;
uid_t nsuid = 0;
gid_t nsgid = 0;
int devnull_fd = -1; int devnull_fd = -1;
struct lxc_handler *handler = data; struct lxc_handler *handler = data;
...@@ -1117,12 +1119,11 @@ static int do_start(void *data) ...@@ -1117,12 +1119,11 @@ static int do_start(void *data)
* privilege over our namespace. * privilege over our namespace.
*/ */
if (!lxc_list_empty(&handler->conf->id_map)) { if (!lxc_list_empty(&handler->conf->id_map)) {
uid_t nsuid = (handler->conf->root_nsuid_map != NULL) if (!handler->conf->root_nsuid_map)
? 0 nsuid = handler->conf->init_uid;
: handler->conf->init_uid;
gid_t nsgid = (handler->conf->root_nsgid_map != NULL) if (!handler->conf->root_nsgid_map)
? 0 nsgid = handler->conf->init_gid;
: handler->conf->init_gid;
ret = lxc_switch_uid_gid(nsuid, nsgid); ret = lxc_switch_uid_gid(nsuid, nsgid);
if (ret < 0) if (ret < 0)
...@@ -1370,6 +1371,13 @@ static int do_start(void *data) ...@@ -1370,6 +1371,13 @@ static int do_start(void *data)
goto out_warn_father; goto out_warn_father;
} }
/* Avoid unnecessary syscalls. */
if (new_uid == nsuid)
new_uid = LXC_INVALID_UID;
if (new_gid == nsgid)
new_gid = LXC_INVALID_GID;
ret = lxc_switch_uid_gid(new_uid, new_gid); ret = lxc_switch_uid_gid(new_uid, new_gid);
if (ret < 0) if (ret < 0)
goto out_warn_father; goto out_warn_father;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment