diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-03-31 05:04:56 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-04-01 15:21:05 +0900 |
commit | 78e278ad48e0d2854f950f261804fde70121820e (patch) | |
tree | ca268dc9abbac12432232ed4257c97990a3d342d /src/udev/udev-node.c | |
parent | 9534d6c9ea790da2e90819e78c739f2dd9895248 (diff) | |
download | systemd-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.c | 18 |
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; |