]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
userns: handle delayed write errors at fclose
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 4 Mar 2013 17:55:16 +0000 (11:55 -0600)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 4 Mar 2013 20:27:18 +0000 (14:27 -0600)
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@ubuntu.com>
src/lxc/conf.c

index 04ab8b86de16aed80bb4d684e0683b4633285ae7..7d70c97aa3d1b27af293e2d02350b175bea61234 100644 (file)
@@ -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)