[Pkg-libvirt-commits] [Git][libvirt-team/libvirt][debian/latest] 6 commits: changelog: Create entry for 10.3.0-1

Andrea Bolognani (@abologna) gitlab at salsa.debian.org
Sat May 4 10:12:46 BST 2024



Andrea Bolognani pushed to branch debian/latest at Libvirt Packaging Team / libvirt


Commits:
a76ffc74 by Andrea Bolognani at 2024-05-02T23:31:54+02:00
changelog: Create entry for 10.3.0-1

Gbp-Dch: Ignore

- - - - -
d6ee33e7 by Andrea Bolognani at 2024-05-02T23:34:16+02:00
symbols: Bump symbol versions

No new public symbols.

Gbp-Dch: Ignore

- - - - -
074c1c12 by Andrea Bolognani at 2024-05-03T01:20:30+02:00
patches: Refresh patches

Gbp-Dch: Ignore

- - - - -
be65bee8 by Andrea Bolognani at 2024-05-04T00:15:23+02:00
patches: Add backport/rpc-ensure-temporary-GSource-is-removed-from-client-event.patch

CVE-2024-4418

Closes: #1070330

- - - - -
6bbdc214 by Andrea Bolognani at 2024-05-04T00:15:32+02:00
copyright: Delete obsolete entries

The corresponding files have been dropped upstream.

Gbp-Dch: Ignore

- - - - -
cf576b16 by Andrea Bolognani at 2024-05-04T00:16:27+02:00
Document changes and release 10.3.0-1

- - - - -


7 changed files:

- debian/changelog
- debian/copyright
- debian/libvirt0.symbols
- + debian/patches/backport/rpc-ensure-temporary-GSource-is-removed-from-client-event.patch
- debian/patches/debian/Debianize-libvirt-guests.patch
- debian/patches/debian/Use-sensible-editor-by-default.patch
- debian/patches/series


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+libvirt (10.3.0-1) unstable; urgency=medium
+
+  * [7845089] New upstream version 10.3.0
+  * [be65bee] patches: Add backport/rpc-ensure-temporary-GSource[...]
+    - Fixes CVE-2024-4418 (Closes: #1070330)
+
+ -- Andrea Bolognani <eof at kiyuko.org>  Sat, 04 May 2024 00:16:21 +0200
+
 libvirt (10.2.0-1) unstable; urgency=medium
 
   * [c1118d1] New upstream version 10.2.0


=====================================
debian/copyright
=====================================
@@ -72,15 +72,6 @@ Copyright: 2020-2021 Microsoft Corp.
 License: LGPL-2.1+
 
 Files: tests/pkix_asn1_tab.c
-       tests/virsh-cpuset
-       tests/virsh-optparse
-       tests/virsh-read-bufsiz
-       tests/virsh-read-non-seekable
-       tests/virsh-schedinfo
-       tests/virsh-self-test
-       tests/virsh-start
-       tests/virsh-undefine
-       tests/virsh-vcpupin
 Copyright: 2008-2019 Red Hat, Inc.
 License: GPL-2.0+
 


=====================================
debian/libvirt0.symbols
=====================================
@@ -101,7 +101,7 @@ libvirt.so.0 libvirt0 #MINVER#
  *@LIBVIRT_9.7.0 9.7.0
  *@LIBVIRT_10.1.0 10.1.0
  *@LIBVIRT_10.2.0 10.2.0
- *@LIBVIRT_PRIVATE_10.2.0 10.2.0
+ *@LIBVIRT_PRIVATE_10.3.0 10.3.0
 
 libvirt-qemu.so.0 libvirt0 #MINVER#
  *@LIBVIRT_QEMU_0.8.3 0.8.3
@@ -119,4 +119,4 @@ libvirt-admin.so.0 libvirt0 #MINVER#
  *@LIBVIRT_ADMIN_2.0.0 2.0.0~rc1
  *@LIBVIRT_ADMIN_3.0.0 3.0.0
  *@LIBVIRT_ADMIN_8.6.0 8.9.0
- *@LIBVIRT_ADMIN_PRIVATE_10.2.0 10.2.0
+ *@LIBVIRT_ADMIN_PRIVATE_10.3.0 10.3.0


=====================================
debian/patches/backport/rpc-ensure-temporary-GSource-is-removed-from-client-event.patch
=====================================
@@ -0,0 +1,98 @@
+From: =?utf-8?b?IkRhbmllbCBQLiBCZXJyYW5nw6ki?= <berrange at redhat.com>
+Date: Tue, 30 Apr 2024 11:51:15 +0100
+Subject: rpc: ensure temporary GSource is removed from client event loop
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Users are seeing periodic segfaults from libvirt client apps,
+especially thread heavy ones like virt-manager. A typical
+stack trace would end up in the virNetClientIOEventFD method,
+with illegal access to stale stack data. eg
+
+==238721==ERROR: AddressSanitizer: stack-use-after-return on address 0x75cd18709788 at pc 0x75cd3111f907 bp 0x75cd181ff550 sp 0x75cd181ff548
+WRITE of size 4 at 0x75cd18709788 thread T11
+    #0 0x75cd3111f906 in virNetClientIOEventFD /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1634:15
+    #1 0x75cd3210d198  (/usr/lib/libglib-2.0.so.0+0x5a198) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
+    #2 0x75cd3216c3be  (/usr/lib/libglib-2.0.so.0+0xb93be) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
+    #3 0x75cd3210ddc6 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5adc6) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
+    #4 0x75cd3111a47c in virNetClientIOEventLoop /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1722:9
+    #5 0x75cd3111a47c in virNetClientIO /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2002:10
+    #6 0x75cd3111a47c in virNetClientSendInternal /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2170:11
+    #7 0x75cd311198a8 in virNetClientSendWithReply /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2198:11
+    #8 0x75cd31111653 in virNetClientProgramCall /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclientprogram.c:318:9
+    #9 0x75cd31241c8f in callFull /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6054:10
+    #10 0x75cd31241c8f in call /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6076:12
+    #11 0x75cd31241c8f in remoteNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/src/remote/remote_client_bodies.h:5959:9
+    #12 0x75cd31410ff7 in virNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/libvirt-network.c:952:15
+
+The root cause is a bad assumption in the virNetClientIOEventLoop
+method. This method is run by whichever thread currently owns the
+buck, and is responsible for handling I/O. Inside a for(;;) loop,
+this method creates a temporary GSource, adds it to the event loop
+and runs g_main_loop_run(). When I/O is ready, the GSource callback
+(virNetClientIOEventFD) will fire and call g_main_loop_quit(), and
+return G_SOURCE_REMOVE which results in the temporary GSource being
+destroyed. A g_autoptr() will then remove the last reference.
+
+What was overlooked, is that a second thread can come along and
+while it can't enter virNetClientIOEventLoop, it will register an
+idle source that uses virNetClientIOWakeup to interrupt the
+original thread's 'g_main_loop_run' call. When this happens the
+virNetClientIOEventFD callback never runs, and so the temporary
+GSource is not destroyed. The g_autoptr() will remove a reference,
+but by virtue of still being attached to the event context, there
+is an extra reference held causing GSource to be leaked. The
+next time 'g_main_loop_run' is called, the original GSource will
+trigger its callback, and access data that was allocated on the
+stack by the previous thread, and likely SEGV.
+
+To solve this, the thread calling 'g_main_loop_run' must call
+g_source_destroy, immediately upon return, to guarantee that
+the temporary GSource is removed.
+
+CVE-2024-4418
+Reviewed-by: Ján Tomko <jtomko at redhat.com>
+Reported-by: Martin Shirokov <shirokovmartin at gmail.com>
+Tested-by: Martin Shirokov <shirokovmartin at gmail.com>
+Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
+(cherry picked from commit 8074d64dc2eca846d6a61efe1a9b7428a0ce1dd1)
+
+Forwarded: not-needed
+Origin: https://gitlab.com/libvirt/libvirt/-/commit/8074d64dc2eca846d6a61efe1a9b7428a0ce1dd1
+---
+ src/rpc/virnetclient.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
+index 68098b1..147b0d6 100644
+--- a/src/rpc/virnetclient.c
++++ b/src/rpc/virnetclient.c
+@@ -1657,7 +1657,7 @@ static int virNetClientIOEventLoop(virNetClient *client,
+ #endif /* !WIN32 */
+         int timeout = -1;
+         virNetMessage *msg = NULL;
+-        g_autoptr(GSource) G_GNUC_UNUSED source = NULL;
++        g_autoptr(GSource) source = NULL;
+         GIOCondition ev = 0;
+         struct virNetClientIOEventData data = {
+             .client = client,
+@@ -1721,6 +1721,18 @@ static int virNetClientIOEventLoop(virNetClient *client,
+ 
+         g_main_loop_run(client->eventLoop);
+ 
++        /*
++         * If virNetClientIOEventFD ran, this GSource will already be
++         * destroyed due to G_SOURCE_REMOVE. It is harmless to re-destroy
++         * it, since we still own a reference.
++         *
++         * If virNetClientIOWakeup ran, it will have interrupted the
++         * g_main_loop_run call, before virNetClientIOEventFD could
++         * run, and thus the GSource is still registered, and we need
++         * to destroy it since it is referencing stack memory for 'data'
++         */
++        g_source_destroy(source);
++
+ #ifndef WIN32
+         ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
+ #endif /* !WIN32 */


=====================================
debian/patches/debian/Debianize-libvirt-guests.patch
=====================================
@@ -9,7 +9,7 @@ Forwarded: not-needed
  2 files changed, 10 insertions(+), 11 deletions(-)
 
 diff --git a/docs/manpages/libvirt-guests.rst b/docs/manpages/libvirt-guests.rst
-index f27eaad..62b279c 100644
+index 42dae28..69bc270 100644
 --- a/docs/manpages/libvirt-guests.rst
 +++ b/docs/manpages/libvirt-guests.rst
 @@ -51,7 +51,7 @@ The following variables are supported:
@@ -31,7 +31,7 @@ index f27eaad..62b279c 100644
    Action taken on host shutdown
  
 diff --git a/tools/libvirt-guests.sh.in b/tools/libvirt-guests.sh.in
-index 344b543..9ea221c 100644
+index c3c5954..e2a3744 100644
 --- a/tools/libvirt-guests.sh.in
 +++ b/tools/libvirt-guests.sh.in
 @@ -20,19 +20,19 @@ sysconfdir="@sysconfdir@"
@@ -60,7 +60,7 @@ index 344b543..9ea221c 100644
  SHUTDOWN_TIMEOUT=300
  PARALLEL_SHUTDOWN=0
  START_DELAY=0
-@@ -43,7 +43,7 @@ test -f "$initconfdir"/libvirt-guests &&
+@@ -44,7 +44,7 @@ test -f "$initconfdir"/libvirt-guests &&
      . "$initconfdir"/libvirt-guests
  
  LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
@@ -69,7 +69,7 @@ index 344b543..9ea221c 100644
  
  RETVAL=0
  
-@@ -562,8 +562,7 @@ gueststatus() {
+@@ -585,8 +585,7 @@ gueststatus() {
  
  # rh_status
  # Display current status: whether saved state exists, and whether start


=====================================
debian/patches/debian/Use-sensible-editor-by-default.patch
=====================================
@@ -10,10 +10,10 @@ Forwarded: not-needed
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/tools/vsh.c b/tools/vsh.c
-index f960710..f89096b 100644
+index 58855f6..43fbf30 100644
 --- a/tools/vsh.c
 +++ b/tools/vsh.c
-@@ -2435,7 +2435,7 @@ vshEditWriteToTempFile(vshControl *ctl, const char *doc)
+@@ -2554,7 +2554,7 @@ vshEditWriteToTempFile(vshControl *ctl, const char *doc)
  
  /* Hard-code default editor used as a fallback if not configured by
   * VISUAL or EDITOR environment variables. */


=====================================
debian/patches/series
=====================================
@@ -1,3 +1,4 @@
+backport/rpc-ensure-temporary-GSource-is-removed-from-client-event.patch
 forward/Reduce-udevadm-settle-timeout-to-10-seconds.patch
 debian/Debianize-libvirt-guests.patch
 debian/apparmor_profiles_local_include.patch



View it on GitLab: https://salsa.debian.org/libvirt-team/libvirt/-/compare/77f854afe63e021394e65bed88fd31060756564c...cf576b16dc6b52fc94c54959baf72c6654a2eeda

-- 
View it on GitLab: https://salsa.debian.org/libvirt-team/libvirt/-/compare/77f854afe63e021394e65bed88fd31060756564c...cf576b16dc6b52fc94c54959baf72c6654a2eeda
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-libvirt-commits/attachments/20240504/467163b1/attachment-0001.htm>


More information about the Pkg-libvirt-commits mailing list