[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