core/namespace: rework the return semantics of clone_device_node yet again

Returning 0 on not-found/wrong-type is confusing. Let's return -ENXIO in that
case instead, and explicitly ignore it in the call site where we want to do that.
I think this is clearer and less likely to be used errenously in case another
call site is added.

C.f. 152c475f95 and 98b1d2b8d9.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-04-12 17:48:22 +02:00
parent 1649861744
commit af984e137e
1 changed files with 6 additions and 9 deletions

View File

@ -585,7 +585,7 @@ static int clone_device_node(const char *d, const char *temporary_mount, bool *m
if (stat(d, &st) < 0) {
if (errno == ENOENT)
return 0;
return -ENXIO;
return -errno;
}
@ -594,7 +594,7 @@ static int clone_device_node(const char *d, const char *temporary_mount, bool *m
return -EINVAL;
if (st.st_rdev == 0)
return 0;
return -ENXIO;
dn = strjoina(temporary_mount, d);
@ -604,7 +604,7 @@ static int clone_device_node(const char *d, const char *temporary_mount, bool *m
mac_selinux_create_file_clear();
if (r == 0)
return 1;
return 0;
if (errno != EPERM)
return log_debug_errno(errno, "mknod failed for %s: %m", d);
@ -628,7 +628,7 @@ static int clone_device_node(const char *d, const char *temporary_mount, bool *m
if (mount(d, dn, NULL, MS_BIND, NULL) < 0)
return log_debug_errno(errno, "mount failed for %s: %m", d);
return 1;
return 0;
}
static int mount_private_dev(MountEntry *m) {
@ -686,10 +686,6 @@ static int mount_private_dev(MountEntry *m) {
r = clone_device_node("/dev/ptmx", temporary_mount, &can_mknod);
if (r < 0)
goto fail;
if (r == 0) {
r = -ENXIO;
goto fail;
}
}
devshm = strjoina(temporary_mount, "/dev/shm");
@ -713,7 +709,8 @@ static int mount_private_dev(MountEntry *m) {
NULSTR_FOREACH(d, devnodes) {
r = clone_device_node(d, temporary_mount, &can_mknod);
if (r < 0)
/* ENXIO means the the *source* is not a device file, skip creation in that case */
if (r < 0 && r != -ENXIO)
goto fail;
}