From c67f84b0254640168977ff52f3a961db407f472e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 31 Oct 2017 11:30:40 +0100 Subject: [PATCH 1/1] Add a helper for /dev/block/major:minor paths --- src/basic/device-nodes.h | 5 +++++ src/shared/bootspec.c | 8 +++----- src/udev/udev-node.c | 19 +++++++++---------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/basic/device-nodes.h b/src/basic/device-nodes.h index 9f3c6d60c08..6136526f84f 100644 --- a/src/basic/device-nodes.h +++ b/src/basic/device-nodes.h @@ -33,3 +33,8 @@ int whitelisted_char_for_devnode(char c, const char *additional); (strlen("/sys/dev/block/") + DECIMAL_STR_MAX(dev_t) + 1 + DECIMAL_STR_MAX(dev_t) + strlen_ptr(suffix)) #define xsprintf_sys_block_path(buf, suffix, devno) \ xsprintf(buf, "/sys/dev/block/%u:%u%s", major(devno), minor(devno), strempty(suffix)) + +#define DEV_NUM_PATH_MAX \ + (strlen("/dev/block/") + DECIMAL_STR_MAX(dev_t) + 1 + DECIMAL_STR_MAX(dev_t)) +#define xsprintf_dev_num_path(buf, type, devno) \ + xsprintf(buf, "/dev/%s/%u:%u", type, major(devno), minor(devno)) diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index 9f80db068de..aa722c304a0 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -25,6 +25,7 @@ #include "bootspec.h" #include "conf-files.h" #include "def.h" +#include "device-nodes.h" #include "efivars.h" #include "fd-util.h" #include "fileio.h" @@ -420,7 +421,7 @@ static int verify_esp( sd_id128_t *ret_uuid) { _cleanup_blkid_free_probe_ blkid_probe b = NULL; - _cleanup_free_ char *t = NULL; + char t[DEV_NUM_PATH_MAX]; uint64_t pstart = 0, psize = 0; struct stat st, st2; const char *v, *t2; @@ -478,10 +479,7 @@ static int verify_esp( if (detect_container() > 0 || geteuid() != 0) goto finish; - r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev)); - if (r < 0) - return log_oom(); - + xsprintf_dev_num_path(t, "block", st.st_dev); errno = 0; b = blkid_new_probe_from_filename(t); if (!b) diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c index dcea890d7f8..ef893247ade 100644 --- a/src/udev/udev-node.c +++ b/src/udev/udev-node.c @@ -25,6 +25,7 @@ #include #include +#include "device-nodes.h" #include "dirent-util.h" #include "format-util.h" #include "fs-util.h" @@ -337,7 +338,7 @@ out: void udev_node_add(struct udev_device *dev, bool apply, mode_t mode, uid_t uid, gid_t gid, struct udev_list *seclabel_list) { - char filename[sizeof("/dev/block/:") + 2*DECIMAL_STR_MAX(unsigned)]; + char filename[DEV_NUM_PATH_MAX]; struct udev_list_entry *list_entry; log_debug("handling device node '%s', devnum=%s, mode=%#o, uid="UID_FMT", gid="GID_FMT, @@ -347,10 +348,9 @@ void udev_node_add(struct udev_device *dev, bool apply, return; /* always add /dev/{block,char}/$major:$minor */ - xsprintf(filename, "/dev/%s/%u:%u", - streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", - major(udev_device_get_devnum(dev)), - minor(udev_device_get_devnum(dev))); + xsprintf_dev_num_path(filename, + streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", + udev_device_get_devnum(dev)); node_symlink(dev, udev_device_get_devnode(dev), filename); /* create/update symlinks, add symlinks to name index */ @@ -360,16 +360,15 @@ void udev_node_add(struct udev_device *dev, bool apply, void udev_node_remove(struct udev_device *dev) { struct udev_list_entry *list_entry; - char filename[sizeof("/dev/block/:") + 2*DECIMAL_STR_MAX(unsigned)]; + char filename[DEV_NUM_PATH_MAX]; /* remove/update symlinks, remove symlinks from name index */ udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) link_update(dev, udev_list_entry_get_name(list_entry), false); /* remove /dev/{block,char}/$major:$minor */ - xsprintf(filename, "/dev/%s/%u:%u", - streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", - major(udev_device_get_devnum(dev)), - minor(udev_device_get_devnum(dev))); + xsprintf_dev_num_path(filename, + streq(udev_device_get_subsystem(dev), "block") ? "block" : "char", + udev_device_get_devnum(dev)); unlink(filename); } -- 2.39.2