[lxc-devel] [PATCH 3/6] userns: handle delayed write errors at fclose
Serge Hallyn
serge.hallyn at ubuntu.com
Mon Mar 4 20:43:25 UTC 2013
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 <serge.hallyn at ubuntu.com>
---
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 04ab8b8..7d70c97 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)
--
1.8.1.2
More information about the lxc-devel
mailing list