summaryrefslogtreecommitdiff
path: root/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
diff options
context:
space:
mode:
Diffstat (limited to '0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch')
-rw-r--r--0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch b/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
new file mode 100644
index 0000000..634ee30
--- /dev/null
+++ b/0028-daemon-lvm-Do-reverse-device-name-translation-on-pvs.patch
@@ -0,0 +1,57 @@
+From ec56c62c90d2230e8edcfaaad4517be63f5e2183 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 20 Jul 2023 11:15:26 +0100
+Subject: [PATCH] daemon: lvm: Do reverse device name translation on pvs_full
+ device fields
+
+Intermittent test failures in virt-filesystems showed that when using
+the pvs_full API, the pv_name field in the returned list of structures
+was not being reverse translated. As a result internal partition
+names could appear in the output of virt-filesystems.
+
+See: https://listman.redhat.com/archives/libguestfs/2023-July/032058.html
+(cherry picked from commit 32cb5b45cfbe5edbc7643fc533da70db2d3c6cda)
+---
+ daemon/lvm.c | 29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/daemon/lvm.c b/daemon/lvm.c
+index 7e76e17c..b8c01f71 100644
+--- a/daemon/lvm.c
++++ b/daemon/lvm.c
+@@ -146,7 +146,34 @@ do_vgs (void)
+ guestfs_int_lvm_pv_list *
+ do_pvs_full (void)
+ {
+- return parse_command_line_pvs ();
++ guestfs_int_lvm_pv_list *r;
++ size_t i;
++ char *din, *dout;
++
++ r = parse_command_line_pvs ();
++ if (r == NULL)
++ /* parse_command_line_pvs has already called reply_with_error */
++ return NULL;
++
++ /* The pv_name fields contain device names which must be reverse
++ * translated. The problem here is that the generator does not have
++ * a "FMountable" field type in types.mli.
++ */
++ for (i = 0; i < r->guestfs_int_lvm_pv_list_len; ++i) {
++ din = r->guestfs_int_lvm_pv_list_val[i].pv_name;
++ if (din) {
++ dout = reverse_device_name_translation (din);
++ if (!dout) {
++ /* reverse_device_name_translation has already called reply_with_error*/
++ /* XXX memory leak here */
++ return NULL;
++ }
++ r->guestfs_int_lvm_pv_list_val[i].pv_name = dout;
++ free (din);
++ }
++ }
++
++ return r;
+ }
+
+ guestfs_int_lvm_vg_list *