core/execute.c: check asprintf return value in the usual fashion

This is unlikely to fail, but we cannot rely on asprintf return value
on failure, so let's just be correct here.

CID #1368227.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2017-01-31 11:31:47 -05:00
parent 56fbd56143
commit 587ab01b53
+22 -16
View File
@@ -1685,25 +1685,31 @@ static int setup_private_users(uid_t uid, gid_t gid) {
* child then writes the UID mapping, under full privileges. The parent waits for the child to finish and
* continues execution normally. */
if (uid != 0 && uid_is_valid(uid))
asprintf(&uid_map,
"0 0 1\n" /* Map root → root */
UID_FMT " " UID_FMT " 1\n", /* Map $UID → $UID */
uid, uid);
else
if (uid != 0 && uid_is_valid(uid)) {
r = asprintf(&uid_map,
"0 0 1\n" /* Map root → root */
UID_FMT " " UID_FMT " 1\n", /* Map $UID → $UID */
uid, uid);
if (r < 0)
return -ENOMEM;
} else {
uid_map = strdup("0 0 1\n"); /* The case where the above is the same */
if (!uid_map)
return -ENOMEM;
if (!uid_map)
return -ENOMEM;
}
if (gid != 0 && gid_is_valid(gid))
asprintf(&gid_map,
"0 0 1\n" /* Map root → root */
GID_FMT " " GID_FMT " 1\n", /* Map $GID → $GID */
gid, gid);
else
if (gid != 0 && gid_is_valid(gid)) {
r = asprintf(&gid_map,
"0 0 1\n" /* Map root → root */
GID_FMT " " GID_FMT " 1\n", /* Map $GID → $GID */
gid, gid);
if (r < 0)
return -ENOMEM;
} else {
gid_map = strdup("0 0 1\n"); /* The case where the above is the same */
if (!gid_map)
return -ENOMEM;
if (!gid_map)
return -ENOMEM;
}
/* Create a communication channel so that the parent can tell the child when it finished creating the user
* namespace. */