!101 [sync] PR-100: backport some bugfix patches from upstream

From: @openeuler-sync-bot 
Reviewed-by: @swf504 
Signed-off-by: @swf504
This commit is contained in:
openeuler-ci-bot 2023-06-25 06:08:37 +00:00 committed by Gitee
commit eae3b82d3e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 102 additions and 1 deletions

View File

@ -0,0 +1,41 @@
From a326ed70228fd1dff16d6f386bbba2760897f627 Mon Sep 17 00:00:00 2001
From: David Teigland <teigland@redhat.com>
Date: Tue, 25 Apr 2023 14:46:36 -0500
Subject: [PATCH] lvmcache: fix valgrind error when dropping md duplicate
When lvmcache info is dropped because it's an md component,
then the lvmcache vginfo can also be dropped, but the list
iterator was still using the list head in vginfo, so break
from the loop earlier to avoid it.
---
lib/cache/lvmcache.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index bee63eb..f67eba2 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -1193,6 +1193,9 @@ void lvmcache_extra_md_component_checks(struct cmd_context *cmd)
*/
dm_list_iterate_items_safe(vginfo, vginfo2, &_vginfos) {
+ char vgid[ID_LEN + 1] __attribute__((aligned(8))) = { 0 };
+ memcpy(vgid, vginfo->vgid, ID_LEN);
+
dm_list_iterate_items_safe(info, info2, &vginfo->infos) {
dev = info->dev;
device_hint = _get_pvsummary_device_hint(dev->pvid);
@@ -1246,6 +1249,10 @@ void lvmcache_extra_md_component_checks(struct cmd_context *cmd)
lvmcache_del(info);
lvmcache_del_dev_from_duplicates(dev);
cmd->filter->wipe(cmd, cmd->filter, dev, NULL);
+
+ /* If vginfo was deleted don't continue using vginfo->infos */
+ if (!_search_vginfos_list(NULL, vgid))
+ break;
}
}
}
--
2.33.0

View File

@ -0,0 +1,55 @@
From 8877cc0ff8e4f2a52006240fa5575c8051cc351f Mon Sep 17 00:00:00 2001
From: Peter Rajnoha <prajnoha@redhat.com>
Date: Tue, 7 Mar 2023 14:45:06 +0100
Subject: [PATCH] toollib: fix segfault if using -S|--select with
log/report_command_log=1 setting
When we are using -S|--select for non-reporting tools while using command log
reporting (log/report_command_log=1 setting), we need to create an internal
processing handle to handle the selection itself. In this case, the internal
processing handle to execute the selection (to process the -S|--select) has
a parent handle (that is processing the actual non-reporting command).
When this parent handle exists, we can't destroy the command log report
in destroy_processing_handle as there's still the parent processing to
finish. The parent processing may still generate logs which need to be
reported in the command log report. If the command log report was
destroyed prematurely together with destroying the internal processing
handle for -S|--select, then any subsequent log request from processing
the actual command (and hence an attermpt to access the command log report)
ended up with a segfault.
See also: https://bugzilla.redhat.com/show_bug.cgi?id=2175220
---
tools/toollib.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/tools/toollib.c b/tools/toollib.c
index bf744d6..18eb7be 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1796,7 +1796,20 @@ void destroy_processing_handle(struct cmd_context *cmd, struct processing_handle
log_restore_report_state(cmd->cmd_report.saved_log_report_state);
- if (!cmd->is_interactive) {
+ /*
+ * Do not destroy current cmd->report_group and cmd->log_rh
+ * (the log report) yet if we're running interactively
+ * (== running in lvm shell) or if there's a parent handle
+ * (== we're executing nested processing, like it is when
+ * doing selection for parent's process_each_* processing).
+ *
+ * In both cases, there's still possible further processing
+ * to do outside the processing covered by the handle we are
+ * destroying here and for which we may still need to access
+ * the log report to cover the rest of the processing.
+ *
+ */
+ if (!cmd->is_interactive && !handle->parent) {
if (!dm_report_group_destroy(cmd->cmd_report.report_group))
stack;
cmd->cmd_report.report_group = NULL;
--
2.33.0

View File

@ -43,7 +43,7 @@
Name: lvm2
Version: 2.03.14
Release: 8
Release: 9
Epoch: 8
Summary: Tools for logical volume management
License: GPLv2+ and LGPLv2.1 and BSD
@ -74,6 +74,8 @@ Patch22: 0022-pvscan-fix-filter-symlink-checks.patch
Patch23: 0023-udev-repeat.patch
Patch24: 0024-use-sync-io-read-bcache-by-defaults.patch
Patch25: 0025-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch
Patch26: 0026-lvmcache-fix-valgrind-error-when-dropping-md-duplica.patch
Patch27: 0027-toollib-fix-segfault-if-using-S-select-with-log-repo.patch
BuildRequires: gcc
BuildRequires: gcc-c++
@ -500,6 +502,9 @@ fi
%changelog
* Sun Jun 25 2023 wangzhiqiang <wangzhiqiang95@huawei.com> - 8:2.03.14-9
- backport some bugfix patches from upstream
* Thu Jun 8 2023 wangzhiqiang <wangzhiqiang95@huawei.com> - 8:2.03.14-8
- fix fail to create lv and pvid file leakage