cdf21d08ef
After updating to latest upstream, bug2163711 can be fixed. We don't use rhel only udev rule anymore and we use the udev rules from upstream. So we don't need to modify our rhel only udev rule again. Resolves: bz#2163711 Signed-off-by: Xiao Ni <xni@redhat.com>
91 lines
2.4 KiB
Diff
91 lines
2.4 KiB
Diff
From de064c93e3819d72720e4fba6575265ba10e1553 Mon Sep 17 00:00:00 2001
|
|
From: Mateusz Grzonka <mateusz.grzonka@intel.com>
|
|
Date: Mon, 13 Jun 2022 12:11:25 +0200
|
|
Subject: [PATCH 15/83] Incremental: Fix possible memory and resource leaks
|
|
|
|
map allocated through map_by_uuid() is not freed if mdfd is invalid.
|
|
In addition mdfd is not closed, and mdinfo list is not freed too.
|
|
|
|
Signed-off-by: Mateusz Grzonka <mateusz.grzonka@intel.com>
|
|
Change-Id: I25e726f0e2502cf7e8ce80c2bd7944b3b1e2b9dc
|
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
---
|
|
Incremental.c | 32 +++++++++++++++++++++++---------
|
|
1 file changed, 23 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/Incremental.c b/Incremental.c
|
|
index a57fc323..4d0cd9d6 100644
|
|
--- a/Incremental.c
|
|
+++ b/Incremental.c
|
|
@@ -1499,7 +1499,7 @@ static int Incremental_container(struct supertype *st, char *devname,
|
|
return 0;
|
|
}
|
|
for (ra = list ; ra ; ra = ra->next) {
|
|
- int mdfd;
|
|
+ int mdfd = -1;
|
|
char chosen_name[1024];
|
|
struct map_ent *mp;
|
|
struct mddev_ident *match = NULL;
|
|
@@ -1514,6 +1514,12 @@ static int Incremental_container(struct supertype *st, char *devname,
|
|
|
|
if (mp) {
|
|
mdfd = open_dev(mp->devnm);
|
|
+ if (!is_fd_valid(mdfd)) {
|
|
+ pr_err("failed to open %s: %s.\n",
|
|
+ mp->devnm, strerror(errno));
|
|
+ rv = 2;
|
|
+ goto release;
|
|
+ }
|
|
if (mp->path)
|
|
strcpy(chosen_name, mp->path);
|
|
else
|
|
@@ -1573,21 +1579,25 @@ static int Incremental_container(struct supertype *st, char *devname,
|
|
c->autof,
|
|
trustworthy,
|
|
chosen_name, 0);
|
|
+
|
|
+ if (!is_fd_valid(mdfd)) {
|
|
+ pr_err("create_mddev failed with chosen name %s: %s.\n",
|
|
+ chosen_name, strerror(errno));
|
|
+ rv = 2;
|
|
+ goto release;
|
|
+ }
|
|
}
|
|
- if (only && (!mp || strcmp(mp->devnm, only) != 0))
|
|
- continue;
|
|
|
|
- if (mdfd < 0) {
|
|
- pr_err("failed to open %s: %s.\n",
|
|
- chosen_name, strerror(errno));
|
|
- return 2;
|
|
+ if (only && (!mp || strcmp(mp->devnm, only) != 0)) {
|
|
+ close_fd(&mdfd);
|
|
+ continue;
|
|
}
|
|
|
|
assemble_container_content(st, mdfd, ra, c,
|
|
chosen_name, &result);
|
|
map_free(map);
|
|
map = NULL;
|
|
- close(mdfd);
|
|
+ close_fd(&mdfd);
|
|
}
|
|
if (c->export && result) {
|
|
char sep = '=';
|
|
@@ -1610,7 +1620,11 @@ static int Incremental_container(struct supertype *st, char *devname,
|
|
}
|
|
printf("\n");
|
|
}
|
|
- return 0;
|
|
+
|
|
+release:
|
|
+ map_free(map);
|
|
+ sysfs_free(list);
|
|
+ return rv;
|
|
}
|
|
|
|
static void run_udisks(char *arg1, char *arg2)
|
|
--
|
|
2.38.1
|
|
|