From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Tue, 5 Jul 2022 11:52:42 +0200 Subject: [PATCH] libmultipath: get rid of PATH_SIZE replace PATH_SIZE with the system limit PATH_MAX. In some places, PATH_SIZE was used for file names. Use FILE_NAME_SIZE in these cases. Also, use a constant for "multipathd.service" in systemd_service_enabled_in(). Signed-off-by: Martin Wilck Reviewed-by: Benjamin Marzinski Signed-off-by: Benjamin Marzinski --- libmultipath/structs.h | 3 --- libmultipath/sysfs.c | 8 ++++---- libmultipath/util.c | 8 +++++--- multipathd/cli_handlers.c | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/libmultipath/structs.h b/libmultipath/structs.h index a6a09441..dfa12ff9 100644 --- a/libmultipath/structs.h +++ b/libmultipath/structs.h @@ -17,7 +17,6 @@ #define FILE_NAME_SIZE 256 #define CALLOUT_MAX_SIZE 256 #define BLK_DEV_SIZE 33 -#define PATH_SIZE 512 #define NAME_SIZE 512 #define HOST_NAME_LEN 16 #define SLOT_NAME_SIZE 40 @@ -519,6 +518,4 @@ int pathcmp (const struct pathgroup *, const struct pathgroup *); int add_feature (char **, const char *); int remove_feature (char **, const char *); -extern char sysfs_path[PATH_SIZE]; - #endif /* _STRUCTS_H */ diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c index 1f0f2074..e48b05ec 100644 --- a/libmultipath/sysfs.c +++ b/libmultipath/sysfs.c @@ -48,7 +48,7 @@ static ssize_t __sysfs_attr_get_value(struct udev_device *dev, const char *attr_ char *value, size_t value_len, bool binary) { const char *syspath; - char devpath[PATH_SIZE]; + char devpath[PATH_MAX]; int fd; ssize_t size = -1; @@ -112,7 +112,7 @@ ssize_t sysfs_attr_set_value(struct udev_device *dev, const char *attr_name, const char * value, size_t value_len) { const char *syspath; - char devpath[PATH_SIZE]; + char devpath[PATH_MAX]; int fd; ssize_t size = -1; @@ -184,7 +184,7 @@ sysfs_get_size (struct path *pp, unsigned long long * size) int sysfs_check_holders(char * check_devt, char * new_devt) { unsigned int major, new_minor, table_minor; - char path[PATH_MAX], check_dev[PATH_SIZE]; + char path[PATH_MAX], check_dev[FILE_NAME_SIZE]; char * table_name; DIR *dirfd; struct dirent *holder; @@ -194,7 +194,7 @@ int sysfs_check_holders(char * check_devt, char * new_devt) return 0; } - if (devt2devname(check_dev, PATH_SIZE, check_devt)) { + if (devt2devname(check_dev, sizeof(check_dev), check_devt)) { condlog(1, "can't get devname for %s", check_devt); return 0; } diff --git a/libmultipath/util.c b/libmultipath/util.c index ce5ea73e..e7e7d4c1 100644 --- a/libmultipath/util.c +++ b/libmultipath/util.c @@ -242,13 +242,15 @@ setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached) int systemd_service_enabled_in(const char *dev, const char *prefix) { - char path[PATH_SIZE], file[PATH_MAX], service[PATH_SIZE]; + static const char service[] = "multipathd.service"; + char path[PATH_MAX], file[PATH_MAX]; DIR *dirfd; struct dirent *d; int found = 0; - snprintf(service, PATH_SIZE, "multipathd.service"); - snprintf(path, PATH_SIZE, "%s/systemd/system", prefix); + if (safe_sprintf(path, "%s/systemd/system", prefix)) + return 0; + condlog(3, "%s: checking for %s in %s", dev, service, path); dirfd = opendir(path); diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c index d79cdd7c..db4d4412 100644 --- a/multipathd/cli_handlers.c +++ b/multipathd/cli_handlers.c @@ -688,7 +688,7 @@ cli_add_map (void * v, struct strbuf *reply, void * data) struct vectors * vecs = (struct vectors *)data; char * param = get_keyparam(v, MAP); int major = -1, minor = -1; - char dev_path[PATH_SIZE]; + char dev_path[FILE_NAME_SIZE]; char *refwwid, *alias = NULL; int rc, count = 0; struct config *conf;