From 4ad6357ad1df1ece0913b5e4548bb3d01190587b Mon Sep 17 00:00:00 2001 From: Vojtech Trefny Date: Mon, 6 Oct 2025 09:19:34 +0200 Subject: [PATCH] lvm-dbus: Fix calling lvcreate with empty list of PVs Resolves: RHEL-113928 --- ...ling-lvcreate-with-empty-list-of-PVs.patch | 48 +++++++++++++++++++ libblockdev.spec | 7 ++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 0017-lvm-dbus-Fix-calling-lvcreate-with-empty-list-of-PVs.patch diff --git a/0017-lvm-dbus-Fix-calling-lvcreate-with-empty-list-of-PVs.patch b/0017-lvm-dbus-Fix-calling-lvcreate-with-empty-list-of-PVs.patch new file mode 100644 index 0000000..fb6f125 --- /dev/null +++ b/0017-lvm-dbus-Fix-calling-lvcreate-with-empty-list-of-PVs.patch @@ -0,0 +1,48 @@ +From 21ff65eb84f4d1d498726712a8dbf703ac97f649 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Thu, 4 Sep 2025 15:51:35 +0200 +Subject: [PATCH] lvm-dbus: Fix calling lvcreate with empty list of PVs + +GLib really dislikes us calling 'g_variant_builder_end' on the +empty array in this case. + +Resolves: RHEL-113928 +--- + src/plugins/lvm-dbus.c | 2 +- + tests/lvm_dbus_tests.py | 7 +++++++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c +index a129d884..b5317b0d 100644 +--- a/src/plugins/lvm-dbus.c ++++ b/src/plugins/lvm-dbus.c +@@ -2061,7 +2061,7 @@ gboolean bd_lvm_lvcreate (const gchar *vg_name, const gchar *lv_name, guint64 si + GVariant *extra_params = NULL; + + /* build the array of PVs (object paths) */ +- if (pv_list) { ++ if (pv_list && *pv_list) { + g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); + for (pv=pv_list; *pv; pv++) { + path = get_object_path (*pv, error); +diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py +index bc8b3052..0a91f224 100644 +--- a/tests/lvm_dbus_tests.py ++++ b/tests/lvm_dbus_tests.py +@@ -725,6 +725,13 @@ class LvmTestLVcreateRemove(LvmPVVGLVTestCase): + succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None) + self.assertTrue(succ) + ++ # no PVs specified ++ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, None, [], None) ++ self.assertTrue(succ) ++ ++ succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None) ++ self.assertTrue(succ) ++ + # not enough space (only one PV) + with six.assertRaisesRegex(self, GLib.GError, "Insufficient free space"): + succ = BlockDev.lvm_lvcreate("testVG", "testLV", 1048 * 1024**2, None, [self.loop_dev], None) +-- +2.50.1 + diff --git a/libblockdev.spec b/libblockdev.spec index 4fc34b8..97a6509 100644 --- a/libblockdev.spec +++ b/libblockdev.spec @@ -129,7 +129,7 @@ Name: libblockdev Version: 2.28 -Release: 14%{?dist} +Release: 15%{?dist} Summary: A library for low-level manipulation with block devices License: LGPLv2+ URL: https://github.com/storaged-project/libblockdev @@ -151,6 +151,7 @@ Patch13: 0013-tests-Remove_unreliable_nvme_attribute_checks.patch Patch14: 0014-nvme-Add-bd_nvme_is_tech_avail-to-the-API-file.patch Patch15: 0015-crypto-Add-a-function-to-set-persistent-flags-for-LU.patch Patch16: 0016-Don-t-allow-suid-and-dev-set-on-fs-resize.patch +Patch17: 0017-lvm-dbus-Fix-calling-lvcreate-with-empty-list-of-PVs.patch BuildRequires: make BuildRequires: glib2-devel @@ -1049,6 +1050,10 @@ find %{buildroot} -type f -name "*.la" | xargs %{__rm} %files plugins-all %changelog +* Mon Oct 06 2025 Vojtech Trefny - 2.28-15 +- lvm-dbus: Fix calling lvcreate with empty list of PVs + Resolves: RHEL-113928 + * Mon Jun 23 2025 Vojtech Trefny - 2.28-14 - Don't allow suid and dev set on fs resize Resolves: RHEL-96039