From cccf5cdd621cd8216cee31da4884a12541890740 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 31 Jan 2023 01:25:33 +0000 Subject: [PATCH] import nbdkit-1.24.0-5.module+el8.8.0+17308+05924798 --- ...K-major-library-version-in-dump-plug.patch | 141 ++++++++++++++++++ ...vddk_library_version-when-we-managed.patch | 55 +++++++ ...0007-vddk-Add-support-for-VDDK-8.0.0.patch | 53 +++++++ SOURCES/copy-patches.sh | 2 +- SPECS/nbdkit.spec | 9 +- 5 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 SOURCES/0005-vddk-Include-VDDK-major-library-version-in-dump-plug.patch create mode 100644 SOURCES/0006-vddk-Only-print-vddk_library_version-when-we-managed.patch create mode 100644 SOURCES/0007-vddk-Add-support-for-VDDK-8.0.0.patch diff --git a/SOURCES/0005-vddk-Include-VDDK-major-library-version-in-dump-plug.patch b/SOURCES/0005-vddk-Include-VDDK-major-library-version-in-dump-plug.patch new file mode 100644 index 0000000..baa47a0 --- /dev/null +++ b/SOURCES/0005-vddk-Include-VDDK-major-library-version-in-dump-plug.patch @@ -0,0 +1,141 @@ +From 9e20e2696fdb68008c9b4f1c36298f813320e381 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sat, 23 Oct 2021 16:16:39 +0100 +Subject: [PATCH] vddk: Include VDDK major library version in --dump-plugin + output + +Although it doesn't seem to be possible to get the precise VDDK +version, With a relatively simple change we can at least return the +VDDK major version. Currently this can be 5, 6 or 7. + +(cherry picked from commit 8700649d147948897f3b97810a1dff37924bdd6e) +--- + plugins/vddk/nbdkit-vddk-plugin.pod | 4 ++++ + plugins/vddk/vddk.c | 29 +++++++++++++++++++---------- + tests/test-vddk-real-dump-plugin.sh | 2 ++ + 3 files changed, 25 insertions(+), 10 deletions(-) + +diff --git a/plugins/vddk/nbdkit-vddk-plugin.pod b/plugins/vddk/nbdkit-vddk-plugin.pod +index 8b14eda0..822b96be 100644 +--- a/plugins/vddk/nbdkit-vddk-plugin.pod ++++ b/plugins/vddk/nbdkit-vddk-plugin.pod +@@ -417,6 +417,10 @@ at runtime. + If this is printed then the C parameter is supported + by this build. + ++=item C ++ ++The VDDK major library version: 5, 6, 7, ... ++ + =item C + + Prints the full path to the VDDK shared library. Since this requires +diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c +index 69193504..291283f4 100644 +--- a/plugins/vddk/vddk.c ++++ b/plugins/vddk/vddk.c +@@ -77,6 +77,7 @@ int vddk_debug_datapath = 1; + static void *dl; /* dlopen handle */ + static bool init_called; /* was InitEx called */ + static __thread int error_suppression; /* threadlocal error suppression */ ++static int library_version; /* VDDK major: 5, 6, 7, ... */ + + static enum { NONE = 0, ZLIB, FASTLZ, SKIPZ } compression; /* compression */ + static char *config; /* config */ +@@ -297,7 +298,10 @@ vddk_config (const char *key, const char *value) + static void + load_library (bool load_error_is_fatal) + { +- static const char *sonames[] = { ++ static struct { ++ const char *soname; ++ int library_version; ++ } libs[] = { + /* Prefer the newest library in case multiple exist. Check two + * possible directories: the usual VDDK installation puts .so + * files in an arch-specific subdirectory of $libdir (our minimum +@@ -305,12 +309,13 @@ load_library (bool load_error_is_fatal) + * but our testsuite is easier to write if we point libdir + * directly to a stub .so. + */ +- "lib64/libvixDiskLib.so.7", +- "libvixDiskLib.so.7", +- "lib64/libvixDiskLib.so.6", +- "libvixDiskLib.so.6", +- "lib64/libvixDiskLib.so.5", +- "libvixDiskLib.so.5", ++ { "lib64/libvixDiskLib.so.7", 7 }, ++ { "libvixDiskLib.so.7", 7 }, ++ { "lib64/libvixDiskLib.so.6", 6 }, ++ { "libvixDiskLib.so.6", 6 }, ++ { "lib64/libvixDiskLib.so.5", 5 }, ++ { "libvixDiskLib.so.5", 5 }, ++ { NULL } + }; + size_t i; + CLEANUP_FREE char *orig_error = NULL; +@@ -323,19 +328,20 @@ load_library (bool load_error_is_fatal) + } + } + +- for (i = 0; i < sizeof sonames / sizeof sonames[0]; ++i) { ++ for (i = 0; libs[i].soname != NULL; ++i) { + CLEANUP_FREE char *path; + + /* Set the full path so that dlopen will preferentially load the + * system libraries from the same directory. + */ +- if (asprintf (&path, "%s/%s", libdir, sonames[i]) == -1) { ++ if (asprintf (&path, "%s/%s", libdir, libs[i].soname) == -1) { + nbdkit_error ("asprintf: %m"); + exit (EXIT_FAILURE); + } + + dl = dlopen (path, RTLD_NOW); + if (dl != NULL) { ++ library_version = libs[i].library_version; + /* Now that we found the library, ensure that LD_LIBRARY_PATH + * includes its directory for all future loads. This may modify + * path in-place and/or re-exec nbdkit, but that's okay. +@@ -356,10 +362,12 @@ load_library (bool load_error_is_fatal) + "If '%s' is located on a non-standard path you may need to\n" + "set libdir=/path/to/vmware-vix-disklib-distrib.\n\n" + "See nbdkit-vddk-plugin(1) man page section \"LIBRARY LOCATION\" for details.", +- orig_error ? : "(unknown error)", sonames[0]); ++ orig_error ? : "(unknown error)", libs[0].soname); + exit (EXIT_FAILURE); + } + ++ assert (library_version >= 5); ++ + /* Load symbols. */ + #define STUB(fn,ret,args) \ + do { \ +@@ -474,6 +482,7 @@ vddk_dump_plugin (void) + + printf ("vddk_default_libdir=%s\n", VDDK_LIBDIR); + printf ("vddk_has_nfchostport=1\n"); ++ printf ("vddk_library_version=%d\n", library_version); + + #if defined(HAVE_DLADDR) + /* It would be nice to print the version of VDDK from the shared +diff --git a/tests/test-vddk-real-dump-plugin.sh b/tests/test-vddk-real-dump-plugin.sh +index 1479e416..59c79693 100755 +--- a/tests/test-vddk-real-dump-plugin.sh ++++ b/tests/test-vddk-real-dump-plugin.sh +@@ -51,10 +51,12 @@ rm -f $files + cleanup_fn rm -f $files + + nbdkit -f -v vddk libdir="$vddkdir" --dump-plugin > $out ++cat $out + + # Check the vddk_* entries are set. + grep ^vddk_default_libdir= $out + grep ^vddk_has_nfchostport= $out ++grep ^vddk_library_version= $out + grep ^vddk_dll= $out + + dll="$(grep ^vddk_dll $out | cut -d= -f2)" +-- +2.31.1 + diff --git a/SOURCES/0006-vddk-Only-print-vddk_library_version-when-we-managed.patch b/SOURCES/0006-vddk-Only-print-vddk_library_version-when-we-managed.patch new file mode 100644 index 0000000..9f14c8d --- /dev/null +++ b/SOURCES/0006-vddk-Only-print-vddk_library_version-when-we-managed.patch @@ -0,0 +1,55 @@ +From b8b376cf39d97c9f523a9867612126088b43c523 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sat, 23 Oct 2021 19:50:52 +0100 +Subject: [PATCH] vddk: Only print vddk_library_version when we managed to load + the library + +Because --dump-plugin calls load_library (false) it won't fail if we +didn't manage to load the library. This results in library_version +being 0, which we printed incorrectly. + +Resolve this problem by not printing the vddk_library_version entry in +this case. + +Fixes: commit 8700649d147948897f3b97810a1dff37924bdd6e +(cherry picked from commit a3fba12c3e9c2113009f556360ae0bd04c45f6bb) +--- + plugins/vddk/nbdkit-vddk-plugin.pod | 1 + + plugins/vddk/vddk.c | 9 ++++++++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/plugins/vddk/nbdkit-vddk-plugin.pod b/plugins/vddk/nbdkit-vddk-plugin.pod +index 822b96be..c56faddc 100644 +--- a/plugins/vddk/nbdkit-vddk-plugin.pod ++++ b/plugins/vddk/nbdkit-vddk-plugin.pod +@@ -420,6 +420,7 @@ by this build. + =item C + + The VDDK major library version: 5, 6, 7, ... ++If this is omitted it means the library could not be loaded. + + =item C + +diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c +index 291283f4..96615749 100644 +--- a/plugins/vddk/vddk.c ++++ b/plugins/vddk/vddk.c +@@ -482,7 +482,14 @@ vddk_dump_plugin (void) + + printf ("vddk_default_libdir=%s\n", VDDK_LIBDIR); + printf ("vddk_has_nfchostport=1\n"); +- printf ("vddk_library_version=%d\n", library_version); ++ ++ /* Because load_library (false) we might not have loaded VDDK, in ++ * which case we didn't set library_version. Note this cannot ++ * happen in the normal (non-debug-plugin) path because there we use ++ * load_library (true). ++ */ ++ if (library_version > 0) ++ printf ("vddk_library_version=%d\n", library_version); + + #if defined(HAVE_DLADDR) + /* It would be nice to print the version of VDDK from the shared +-- +2.31.1 + diff --git a/SOURCES/0007-vddk-Add-support-for-VDDK-8.0.0.patch b/SOURCES/0007-vddk-Add-support-for-VDDK-8.0.0.patch new file mode 100644 index 0000000..12150c2 --- /dev/null +++ b/SOURCES/0007-vddk-Add-support-for-VDDK-8.0.0.patch @@ -0,0 +1,53 @@ +From e850f65053d89ad54c27280f48506da5eb631a68 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 18 Nov 2022 09:43:19 +0000 +Subject: [PATCH] vddk: Add support for VDDK 8.0.0 + +There are no changes in any of the structures or enums that we rely on. + +Reported-by: Ming Xie +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143889 +(cherry picked from commit dbe12ed499baeea94d603db55cad9e971e0ebcf0) +--- + plugins/vddk/nbdkit-vddk-plugin.pod | 2 +- + plugins/vddk/vddk.c | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/plugins/vddk/nbdkit-vddk-plugin.pod b/plugins/vddk/nbdkit-vddk-plugin.pod +index c56faddc..c94c41eb 100644 +--- a/plugins/vddk/nbdkit-vddk-plugin.pod ++++ b/plugins/vddk/nbdkit-vddk-plugin.pod +@@ -419,7 +419,7 @@ by this build. + + =item C + +-The VDDK major library version: 5, 6, 7, ... ++The VDDK major library version: 5, 6, 7, 8, ... + If this is omitted it means the library could not be loaded. + + =item C +diff --git a/plugins/vddk/vddk.c b/plugins/vddk/vddk.c +index 96615749..2140789a 100644 +--- a/plugins/vddk/vddk.c ++++ b/plugins/vddk/vddk.c +@@ -77,7 +77,7 @@ int vddk_debug_datapath = 1; + static void *dl; /* dlopen handle */ + static bool init_called; /* was InitEx called */ + static __thread int error_suppression; /* threadlocal error suppression */ +-static int library_version; /* VDDK major: 5, 6, 7, ... */ ++static int library_version; /* VDDK major: 5, 6, 7, 8, ... */ + + static enum { NONE = 0, ZLIB, FASTLZ, SKIPZ } compression; /* compression */ + static char *config; /* config */ +@@ -309,6 +309,8 @@ load_library (bool load_error_is_fatal) + * but our testsuite is easier to write if we point libdir + * directly to a stub .so. + */ ++ { "lib64/libvixDiskLib.so.8", 8 }, ++ { "libvixDiskLib.so.8", 8 }, + { "lib64/libvixDiskLib.so.7", 7 }, + { "libvixDiskLib.so.7", 7 }, + { "lib64/libvixDiskLib.so.6", 6 }, +-- +2.31.1 + diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 299454a..19768af 100755 --- a/SOURCES/copy-patches.sh +++ b/SOURCES/copy-patches.sh @@ -6,7 +6,7 @@ set -e # directory. Use it like this: # ./copy-patches.sh -rhel_version=8.6 +rhel_version=8.8 # Check we're in the right directory. if [ ! -f nbdkit.spec ]; then diff --git a/SPECS/nbdkit.spec b/SPECS/nbdkit.spec index a62641b..9a4ac4e 100644 --- a/SPECS/nbdkit.spec +++ b/SPECS/nbdkit.spec @@ -40,7 +40,7 @@ ExclusiveArch: x86_64 Name: nbdkit Version: 1.24.0 -Release: 4%{?dist} +Release: 5%{?dist} Summary: NBD server License: BSD @@ -69,6 +69,9 @@ Patch0001: 0001-cache-cow-Fix-data-corruption-in-zero-and-trim-on-un.patch Patch0002: 0002-server-CVE-2021-3716-reset-structured-replies-on-sta.patch Patch0003: 0003-server-reset-meta-context-replies-on-starttls.patch Patch0004: 0004-cow-Fix-for-qemu-6.1-which-requires-backing-format.patch +Patch0005: 0005-vddk-Include-VDDK-major-library-version-in-dump-plug.patch +Patch0006: 0006-vddk-Only-print-vddk_library_version-when-we-managed.patch +Patch0007: 0007-vddk-Add-support-for-VDDK-8.0.0.patch %if 0%{patches_touch_autotools} BuildRequires: autoconf, automake, libtool @@ -1238,6 +1241,10 @@ export LIBGUESTFS_TRACE=1 %changelog +* Fri Nov 18 2022 Richard W.M. Jones - 1.24.0-5 +- vddk: Add support for VDDK 8.0.0 + resolves: rhbz#2143907 + * Wed Jan 26 2022 Richard W.M. Jones - 1.24.0-4 - Fix build on RHEL 8.6 with qemu >= 6.1 resolves: rhbz#2045945