From e4ccd113dce99c9eb0cfba23c09eda4b58234d0d Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Mon, 4 Mar 2013 11:55:16 -0600 Subject: [PATCH] userns: handle delayed write errors at fclose As Kees pointed out, write() errors can be delayed and returned as close() errors. So don't ignore error on close when writing the userns id mapping. Signed-off-by: Serge Hallyn --- src/lxc/conf.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 04ab8b86d..7d70c97aa 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2447,7 +2447,7 @@ int lxc_assign_network(struct lxc_list *network, pid_t pid) int add_id_mapping(enum idtype idtype, pid_t pid, uid_t host_start, uid_t ns_start, int range) { char path[PATH_MAX]; - int ret; + int ret, closeret; FILE *f; ret = snprintf(path, PATH_MAX, "/proc/%d/%cid_map", pid, idtype == ID_TYPE_UID ? 'u' : 'g'); @@ -2462,9 +2462,11 @@ int add_id_mapping(enum idtype idtype, pid_t pid, uid_t host_start, uid_t ns_sta } ret = fprintf(f, "%d %d %d", ns_start, host_start, range); if (ret < 0) - perror("write"); - fclose(f); - return ret < 0 ? ret : 0; + SYSERROR("writing id mapping"); + closeret = fclose(f); + if (closeret) + SYSERROR("writing id mapping"); + return ret < 0 ? ret : closeret; } int lxc_map_ids(struct lxc_list *idmap, pid_t pid)