Merge pull request #13984 from yuwata/udev-fix-13976
udev: fix issue #13976
This commit is contained in:
commit
d1be9a4380
|
@ -296,8 +296,11 @@ static int node_permissions_apply(sd_device *dev, bool apply_mac,
|
||||||
else
|
else
|
||||||
mode |= S_IFCHR;
|
mode |= S_IFCHR;
|
||||||
|
|
||||||
if (lstat(devnode, &stats) < 0)
|
if (lstat(devnode, &stats) < 0) {
|
||||||
|
if (errno == ENOENT)
|
||||||
|
return 0; /* this is necessarily racey, so ignore missing the device */
|
||||||
return log_device_debug_errno(dev, errno, "cannot stat() node %s: %m", devnode);
|
return log_device_debug_errno(dev, errno, "cannot stat() node %s: %m", devnode);
|
||||||
|
}
|
||||||
|
|
||||||
if ((mode != MODE_INVALID && (stats.st_mode & S_IFMT) != (mode & S_IFMT)) || stats.st_rdev != devnum)
|
if ((mode != MODE_INVALID && (stats.st_mode & S_IFMT) != (mode & S_IFMT)) || stats.st_rdev != devnum)
|
||||||
return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST),
|
return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST),
|
||||||
|
@ -322,11 +325,13 @@ static int node_permissions_apply(sd_device *dev, bool apply_mac,
|
||||||
|
|
||||||
r = chmod_and_chown(devnode, mode, uid, gid);
|
r = chmod_and_chown(devnode, mode, uid, gid);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_device_warning_errno(dev, r, "Failed to set owner/mode of %s to uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o: %m",
|
log_device_full(dev, r == -ENOENT ? LOG_DEBUG : LOG_ERR, r,
|
||||||
devnode,
|
"Failed to set owner/mode of %s to uid=" UID_FMT
|
||||||
uid_is_valid(uid) ? uid : stats.st_uid,
|
", gid=" GID_FMT ", mode=%#o: %m",
|
||||||
gid_is_valid(gid) ? gid : stats.st_gid,
|
devnode,
|
||||||
mode != MODE_INVALID ? mode & 0777 : stats.st_mode & 0777);
|
uid_is_valid(uid) ? uid : stats.st_uid,
|
||||||
|
gid_is_valid(gid) ? gid : stats.st_gid,
|
||||||
|
mode != MODE_INVALID ? mode & 0777 : stats.st_mode & 0777);
|
||||||
} else
|
} else
|
||||||
log_device_debug(dev, "Preserve permissions of %s, uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o",
|
log_device_debug(dev, "Preserve permissions of %s, uid=" UID_FMT ", gid=" GID_FMT ", mode=%#o",
|
||||||
devnode,
|
devnode,
|
||||||
|
@ -343,7 +348,8 @@ static int node_permissions_apply(sd_device *dev, bool apply_mac,
|
||||||
|
|
||||||
q = mac_selinux_apply(devnode, label);
|
q = mac_selinux_apply(devnode, label);
|
||||||
if (q < 0)
|
if (q < 0)
|
||||||
log_device_error_errno(dev, q, "SECLABEL: failed to set SELinux label '%s': %m", label);
|
log_device_full(dev, q == -ENOENT ? LOG_DEBUG : LOG_ERR, q,
|
||||||
|
"SECLABEL: failed to set SELinux label '%s': %m", label);
|
||||||
else
|
else
|
||||||
log_device_debug(dev, "SECLABEL: set SELinux label '%s'", label);
|
log_device_debug(dev, "SECLABEL: set SELinux label '%s'", label);
|
||||||
|
|
||||||
|
@ -352,7 +358,8 @@ static int node_permissions_apply(sd_device *dev, bool apply_mac,
|
||||||
|
|
||||||
q = mac_smack_apply(devnode, SMACK_ATTR_ACCESS, label);
|
q = mac_smack_apply(devnode, SMACK_ATTR_ACCESS, label);
|
||||||
if (q < 0)
|
if (q < 0)
|
||||||
log_device_error_errno(dev, q, "SECLABEL: failed to set SMACK label '%s': %m", label);
|
log_device_full(dev, q == -ENOENT ? LOG_DEBUG : LOG_ERR, q,
|
||||||
|
"SECLABEL: failed to set SMACK label '%s': %m", label);
|
||||||
else
|
else
|
||||||
log_device_debug(dev, "SECLABEL: set SMACK label '%s'", label);
|
log_device_debug(dev, "SECLABEL: set SMACK label '%s'", label);
|
||||||
|
|
||||||
|
|
|
@ -2333,9 +2333,10 @@ static int apply_static_dev_perms(const char *devnode, uid_t uid, gid_t gid, mod
|
||||||
gid = 0;
|
gid = 0;
|
||||||
|
|
||||||
r = chmod_and_chown(device_node, mode, uid, gid);
|
r = chmod_and_chown(device_node, mode, uid, gid);
|
||||||
|
if (r == -ENOENT)
|
||||||
|
return 0;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(errno, "Failed to chown '%s' %u %u: %m",
|
return log_error_errno(r, "Failed to chown '%s' %u %u: %m", device_node, uid, gid);
|
||||||
device_node, uid, gid);
|
|
||||||
else
|
else
|
||||||
log_debug("chown '%s' %u:%u with mode %#o", device_node, uid, gid, mode);
|
log_debug("chown '%s' %u:%u with mode %#o", device_node, uid, gid, mode);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue