import device-mapper-multipath-0.8.4-12.el8
This commit is contained in:
parent
d35fa1930e
commit
4fe49bb44c
@ -0,0 +1,129 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: lixiaokeng <lixiaokeng@huawei.com>
|
||||||
|
Date: Mon, 21 Sep 2020 12:00:39 +0800
|
||||||
|
Subject: [PATCH] libmultipath: check udev_device_get_* return value to avoid
|
||||||
|
segfault
|
||||||
|
|
||||||
|
The udev_device_get_* function may return NULL, and it will be
|
||||||
|
deregerenced in str* and sscanf func. We check the return value
|
||||||
|
to avoid segfault. Fix all.
|
||||||
|
|
||||||
|
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
||||||
|
Signed-off-by:Lixiaokeng<lixiaokeng@huawei.com>
|
||||||
|
Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
|
||||||
|
Signed-off-by: Linfeilong <linfeilong@huawei.com>
|
||||||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||||
|
---
|
||||||
|
libmultipath/configure.c | 4 +++-
|
||||||
|
libmultipath/discovery.c | 9 +++++++--
|
||||||
|
libmultipath/foreign/nvme.c | 10 +++++++---
|
||||||
|
3 files changed, 17 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||||
|
index 2e8f34f9..a6893d8d 100644
|
||||||
|
--- a/libmultipath/configure.c
|
||||||
|
+++ b/libmultipath/configure.c
|
||||||
|
@@ -511,6 +511,7 @@ static void trigger_partitions_udev_change(struct udev_device *dev,
|
||||||
|
{
|
||||||
|
struct udev_enumerate *part_enum;
|
||||||
|
struct udev_list_entry *item;
|
||||||
|
+ const char *devtype;
|
||||||
|
|
||||||
|
part_enum = udev_enumerate_new(udev);
|
||||||
|
if (!part_enum)
|
||||||
|
@@ -531,7 +532,8 @@ static void trigger_partitions_udev_change(struct udev_device *dev,
|
||||||
|
if (!part)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- if (!strcmp("partition", udev_device_get_devtype(part))) {
|
||||||
|
+ devtype = udev_device_get_devtype(part);
|
||||||
|
+ if (devtype && !strcmp("partition", devtype)) {
|
||||||
|
condlog(4, "%s: triggering %s event for %s", __func__,
|
||||||
|
action, syspath);
|
||||||
|
sysfs_attr_set_value(part, "uevent", action, len);
|
||||||
|
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||||
|
index a328aafa..74abf34d 100644
|
||||||
|
--- a/libmultipath/discovery.c
|
||||||
|
+++ b/libmultipath/discovery.c
|
||||||
|
@@ -353,7 +353,7 @@ sysfs_get_tgt_nodename(struct path *pp, char *node)
|
||||||
|
tgtdev = udev_device_get_parent(parent);
|
||||||
|
while (tgtdev) {
|
||||||
|
tgtname = udev_device_get_sysname(tgtdev);
|
||||||
|
- if (sscanf(tgtname, "end_device-%d:%d",
|
||||||
|
+ if (tgtname && sscanf(tgtname, "end_device-%d:%d",
|
||||||
|
&host, &tgtid) == 2)
|
||||||
|
break;
|
||||||
|
tgtdev = udev_device_get_parent(tgtdev);
|
||||||
|
@@ -386,7 +386,7 @@ sysfs_get_tgt_nodename(struct path *pp, char *node)
|
||||||
|
/* Check for FibreChannel */
|
||||||
|
tgtdev = udev_device_get_parent(parent);
|
||||||
|
value = udev_device_get_sysname(tgtdev);
|
||||||
|
- if (sscanf(value, "rport-%d:%d-%d",
|
||||||
|
+ if (value && sscanf(value, "rport-%d:%d-%d",
|
||||||
|
&host, &channel, &tgtid) == 3) {
|
||||||
|
tgtdev = udev_device_new_from_subsystem_sysname(udev,
|
||||||
|
"fc_remote_ports", value);
|
||||||
|
@@ -516,6 +516,9 @@ int sysfs_get_host_pci_name(const struct path *pp, char *pci_name)
|
||||||
|
*/
|
||||||
|
value = udev_device_get_sysname(parent);
|
||||||
|
|
||||||
|
+ if (!value)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
strncpy(pci_name, value, SLOT_NAME_SIZE);
|
||||||
|
udev_device_unref(hostdev);
|
||||||
|
return 0;
|
||||||
|
@@ -1518,6 +1521,8 @@ ccw_sysfs_pathinfo (struct path * pp, vector hwtable)
|
||||||
|
* host / bus / target / lun
|
||||||
|
*/
|
||||||
|
attr_path = udev_device_get_sysname(parent);
|
||||||
|
+ if (!attr_path)
|
||||||
|
+ return PATHINFO_FAILED;
|
||||||
|
pp->sg_id.lun = 0;
|
||||||
|
if (sscanf(attr_path, "%i.%i.%x",
|
||||||
|
&pp->sg_id.host_no,
|
||||||
|
diff --git a/libmultipath/foreign/nvme.c b/libmultipath/foreign/nvme.c
|
||||||
|
index 09cdddf0..5feb1e95 100644
|
||||||
|
--- a/libmultipath/foreign/nvme.c
|
||||||
|
+++ b/libmultipath/foreign/nvme.c
|
||||||
|
@@ -482,6 +482,7 @@ _find_path_by_syspath(struct nvme_map *map, const char *syspath)
|
||||||
|
struct nvme_pathgroup *pg;
|
||||||
|
char real[PATH_MAX];
|
||||||
|
const char *ppath;
|
||||||
|
+ const char *psyspath;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ppath = realpath(syspath, real);
|
||||||
|
@@ -493,8 +494,8 @@ _find_path_by_syspath(struct nvme_map *map, const char *syspath)
|
||||||
|
vector_foreach_slot(&map->pgvec, pg, i) {
|
||||||
|
struct nvme_path *path = nvme_pg_to_path(pg);
|
||||||
|
|
||||||
|
- if (!strcmp(ppath,
|
||||||
|
- udev_device_get_syspath(path->udev)))
|
||||||
|
+ psyspath = udev_device_get_syspath(path->udev);
|
||||||
|
+ if (psyspath && !strcmp(ppath, psyspath))
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
condlog(4, "%s: %s: %s not found", __func__, THIS, ppath);
|
||||||
|
@@ -538,6 +539,7 @@ struct udev_device *get_ctrl_blkdev(const struct context *ctx,
|
||||||
|
struct udev_list_entry *item;
|
||||||
|
struct udev_device *blkdev = NULL;
|
||||||
|
struct udev_enumerate *enm = udev_enumerate_new(ctx->udev);
|
||||||
|
+ const char *devtype;
|
||||||
|
|
||||||
|
if (enm == NULL)
|
||||||
|
return NULL;
|
||||||
|
@@ -562,7 +564,9 @@ struct udev_device *get_ctrl_blkdev(const struct context *ctx,
|
||||||
|
udev_list_entry_get_name(item));
|
||||||
|
if (tmp == NULL)
|
||||||
|
continue;
|
||||||
|
- if (!strcmp(udev_device_get_devtype(tmp), "disk")) {
|
||||||
|
+
|
||||||
|
+ devtype = udev_device_get_devtype(tmp);
|
||||||
|
+ if (devtype && !strcmp(devtype, "disk")) {
|
||||||
|
blkdev = tmp;
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
--
|
||||||
|
2.17.2
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
Summary: Tools to manage multipath devices using device-mapper
|
Summary: Tools to manage multipath devices using device-mapper
|
||||||
Name: device-mapper-multipath
|
Name: device-mapper-multipath
|
||||||
Version: 0.8.4
|
Version: 0.8.4
|
||||||
Release: 11%{?dist}
|
Release: 12%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
URL: http://christophe.varoqui.free.fr/
|
URL: http://christophe.varoqui.free.fr/
|
||||||
@ -74,6 +74,7 @@ Patch00060: 0060-kpartx-free-loop-device-after-listing-partitions.patch
|
|||||||
Patch00061: 0061-RH-fix-find_multipaths-in-mpathconf.patch
|
Patch00061: 0061-RH-fix-find_multipaths-in-mpathconf.patch
|
||||||
Patch00062: 0062-libmultipath-select_action-don-t-drop-map-if-alias-c.patch
|
Patch00062: 0062-libmultipath-select_action-don-t-drop-map-if-alias-c.patch
|
||||||
Patch00063: 0063-libmultipath-check-if-user_friendly_name-is-in-use.patch
|
Patch00063: 0063-libmultipath-check-if-user_friendly_name-is-in-use.patch
|
||||||
|
Patch00064: 0064-libmultipath-check-udev_device_get_-return-value-to-.patch
|
||||||
|
|
||||||
# runtime
|
# runtime
|
||||||
Requires: %{name}-libs = %{version}-%{release}
|
Requires: %{name}-libs = %{version}-%{release}
|
||||||
@ -275,6 +276,11 @@ fi
|
|||||||
%{_pkgconfdir}/libdmmp.pc
|
%{_pkgconfdir}/libdmmp.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 21 2021 Benjamin Marzinski <bmarzins@redhat.com> 0.8.4-12
|
||||||
|
- Add 0064-libmultipath-check-udev_device_get_-return-value-to-.patch
|
||||||
|
* Fixes bz #1946940
|
||||||
|
- Resolves: bz #1946940
|
||||||
|
|
||||||
* Fri Mar 12 2021 Benjamin Marzinski <bmarzins@redhat.com> 0.8.4-11
|
* Fri Mar 12 2021 Benjamin Marzinski <bmarzins@redhat.com> 0.8.4-11
|
||||||
- Add 0062-libmultipath-select_action-don-t-drop-map-if-alias-c.patch
|
- Add 0062-libmultipath-select_action-don-t-drop-map-if-alias-c.patch
|
||||||
* Fall back to WWID names instead of removing existing device
|
* Fall back to WWID names instead of removing existing device
|
||||||
|
Loading…
Reference in New Issue
Block a user