Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:lnussel:usrmerge
mdadm
0015-Mdmonitor-Fix-segfault.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0015-Mdmonitor-Fix-segfault.patch of Package mdadm
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/61] Mdmonitor: Fix segfault Patch-mainline: mdadm-4.2+ References: jsc#PED-1009 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> Signed-off-by: Coly Li <colyli@suse.de> --- 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 c0ab541..4e5802b 100644 --- a/Monitor.c +++ b/Monitor.c @@ -182,6 +182,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); @@ -190,6 +191,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; @@ -203,7 +206,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 09915a0..d53df16 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1636,6 +1636,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.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor