summaryrefslogtreecommitdiff
path: root/src/udev/udev-node.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-03-31 05:04:56 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-04-01 15:21:05 +0900
commit78e278ad48e0d2854f950f261804fde70121820e (patch)
treeca268dc9abbac12432232ed4257c97990a3d342d /src/udev/udev-node.c
parent9534d6c9ea790da2e90819e78c739f2dd9895248 (diff)
downloadsystemd-78e278ad48e0d2854f950f261804fde70121820e.tar.gz
udev: use sd_device_open() where appropriate
Diffstat (limited to 'src/udev/udev-node.c')
-rw-r--r--src/udev/udev-node.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
index 1824ccef6a..c313181041 100644
--- a/src/udev/udev-node.c
+++ b/src/udev/udev-node.c
@@ -598,7 +598,7 @@ int udev_node_apply_permissions(
gid_t gid,
OrderedHashmap *seclabel_list) {
- const char *devnode, *subsystem, *id = NULL;
+ const char *devnode, *subsystem;
bool apply_mode, apply_uid, apply_gid;
_cleanup_close_ int node_fd = -1;
struct stat stats;
@@ -616,33 +616,25 @@ int udev_node_apply_permissions(
r = sd_device_get_devnum(dev, &devnum);
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to get devnum: %m");
- (void) device_get_device_id(dev, &id);
if (streq(subsystem, "block"))
mode |= S_IFBLK;
else
mode |= S_IFCHR;
- node_fd = open(devnode, O_PATH|O_NOFOLLOW|O_CLOEXEC);
+ node_fd = sd_device_open(dev, O_PATH|O_CLOEXEC);
if (node_fd < 0) {
- if (errno == ENOENT) {
- log_device_debug_errno(dev, errno, "Device node %s is missing, skipping handling.", devnode);
+ if (ERRNO_IS_DEVICE_ABSENT(node_fd)) {
+ log_device_debug_errno(dev, node_fd, "Device node %s is missing, skipping handling.", devnode);
return 0; /* This is necessarily racey, so ignore missing the device */
}
- return log_device_debug_errno(dev, errno, "Cannot open node %s: %m", devnode);
+ return log_device_debug_errno(dev, node_fd, "Cannot open node %s: %m", devnode);
}
if (fstat(node_fd, &stats) < 0)
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) {
- log_device_debug(dev, "Found node '%s' with non-matching devnum %s, skipping handling.",
- devnode, strna(id));
- return 0; /* We might process a device that already got replaced by the time we have a look
- * at it, handle this gracefully and step away. */
- }
-
apply_mode = mode != MODE_INVALID && (stats.st_mode & 0777) != (mode & 0777);
apply_uid = uid_is_valid(uid) && stats.st_uid != uid;
apply_gid = gid_is_valid(gid) && stats.st_gid != gid;