Mdmonitor: Fix segfault
This commit is contained in:
parent
a6475ed057
commit
6efe0290e4
98
0016-Mdmonitor-Fix-segfault.patch
Normal file
98
0016-Mdmonitor-Fix-segfault.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From e702f392959d1c2ad2089e595b52235ed97b4e18 Mon Sep 17 00:00:00 2001
|
||||
From: Kinga Tanska <kinga.tanska@intel.com>
|
||||
Date: Mon, 6 Jun 2022 12:32:12 +0200
|
||||
Subject: [PATCH 16/83] Mdmonitor: Fix segfault
|
||||
|
||||
Mdadm with "--monitor" parameter requires md device
|
||||
as an argument to be monitored. If given argument is
|
||||
not a md device, error shall be returned. Previously
|
||||
it was not checked and invalid argument caused
|
||||
segmentation fault. This commit adds checking
|
||||
that devices passed to mdmonitor are md devices.
|
||||
|
||||
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
Monitor.c | 10 +++++++++-
|
||||
mdadm.h | 1 +
|
||||
mdopen.c | 17 +++++++++++++++++
|
||||
3 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Monitor.c b/Monitor.c
|
||||
index 30c031a..9f1765d 100644
|
||||
--- a/Monitor.c
|
||||
+++ b/Monitor.c
|
||||
@@ -183,6 +183,7 @@ int Monitor(struct mddev_dev *devlist,
|
||||
continue;
|
||||
if (strcasecmp(mdlist->devname, "<ignore>") == 0)
|
||||
continue;
|
||||
+
|
||||
st = xcalloc(1, sizeof *st);
|
||||
if (mdlist->devname[0] == '/')
|
||||
st->devname = xstrdup(mdlist->devname);
|
||||
@@ -191,6 +192,8 @@ int Monitor(struct mddev_dev *devlist,
|
||||
strcpy(strcpy(st->devname, "/dev/md/"),
|
||||
mdlist->devname);
|
||||
}
|
||||
+ if (!is_mddev(mdlist->devname))
|
||||
+ return 1;
|
||||
st->next = statelist;
|
||||
st->devnm[0] = 0;
|
||||
st->percent = RESYNC_UNKNOWN;
|
||||
@@ -204,7 +207,12 @@ int Monitor(struct mddev_dev *devlist,
|
||||
struct mddev_dev *dv;
|
||||
|
||||
for (dv = devlist; dv; dv = dv->next) {
|
||||
- struct state *st = xcalloc(1, sizeof *st);
|
||||
+ struct state *st;
|
||||
+
|
||||
+ if (!is_mddev(dv->devname))
|
||||
+ return 1;
|
||||
+
|
||||
+ st = xcalloc(1, sizeof *st);
|
||||
mdlist = conf_get_ident(dv->devname);
|
||||
st->devname = xstrdup(dv->devname);
|
||||
st->next = statelist;
|
||||
diff --git a/mdadm.h b/mdadm.h
|
||||
index 0d322b7..30025a1 100644
|
||||
--- a/mdadm.h
|
||||
+++ b/mdadm.h
|
||||
@@ -1635,6 +1635,7 @@ extern int create_mddev(char *dev, char *name, int autof, int trustworthy,
|
||||
#define FOREIGN 2
|
||||
#define METADATA 3
|
||||
extern int open_mddev(char *dev, int report_errors);
|
||||
+extern int is_mddev(char *dev);
|
||||
extern int open_container(int fd);
|
||||
extern int metadata_container_matches(char *metadata, char *devnm);
|
||||
extern int metadata_subdev_matches(char *metadata, char *devnm);
|
||||
diff --git a/mdopen.c b/mdopen.c
|
||||
index 245be53..d18c931 100644
|
||||
--- a/mdopen.c
|
||||
+++ b/mdopen.c
|
||||
@@ -475,6 +475,23 @@ int open_mddev(char *dev, int report_errors)
|
||||
return mdfd;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * is_mddev() - check that file name passed is an md device.
|
||||
+ * @dev: file name that has to be checked.
|
||||
+ * Return: 1 if file passed is an md device, 0 if not.
|
||||
+ */
|
||||
+int is_mddev(char *dev)
|
||||
+{
|
||||
+ int fd = open_mddev(dev, 1);
|
||||
+
|
||||
+ if (fd >= 0) {
|
||||
+ close(fd);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
char *find_free_devnm(int use_partitions)
|
||||
{
|
||||
static char devnm[32];
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Name: mdadm
|
||||
Version: 4.2
|
||||
Release: 12
|
||||
Release: 13
|
||||
Summary: The software RAID arrays user manage tools
|
||||
License: GPLv2+
|
||||
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
|
||||
@ -25,6 +25,7 @@ Patch12: 0012-Manage-do-not-check-array-state-when-drive-is-remove.patch
|
||||
Patch13: 0013-incremental-manage-do-not-verify-if-remove-is-safe.patch
|
||||
Patch14: 0014-Fix-race-of-mdadm-add-and-mdadm-incremental.patch
|
||||
Patch15: 0015-mdadm-Fix-double-free.patch
|
||||
Patch16: 0016-Mdmonitor-Fix-segfault.patch
|
||||
|
||||
BuildRequires: systemd gcc binutils libudev-devel
|
||||
|
||||
@ -91,6 +92,9 @@ install -d -m 710 %{buildroot}/var/run/mdadm/
|
||||
%{_mandir}/man*/*
|
||||
|
||||
%changelog
|
||||
* Wed May 8 2024 Deyuan Fan <fandeyuan@kylinos.cn> - 4.2-13
|
||||
- Mdmonitor: Fix segfault
|
||||
|
||||
* Thu Apr 18 2024 liuh <liuhuan01@kylinos.cm> - 4.2-12
|
||||
- sync patch from community
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user