This commit is contained in:
parent
d1cd1b7ceb
commit
4084288dd5
@ -0,0 +1,55 @@
|
|||||||
|
From 46532e3e8ed5f5a736a02f67d6c805492f9ca720 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Date: Fri, 4 Jan 2013 16:15:04 +0100
|
||||||
|
Subject: [PATCH] rpc: Fix crash on error paths of message dispatching
|
||||||
|
|
||||||
|
This patch resolves CVE-2013-0170:
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=893450
|
||||||
|
|
||||||
|
When reading and dispatching of a message failed the message was freed
|
||||||
|
but wasn't removed from the message queue.
|
||||||
|
|
||||||
|
After that when the connection was about to be closed the pointer for
|
||||||
|
the message was still present in the queue and it was passed to
|
||||||
|
virNetMessageFree which tried to call the callback function from an
|
||||||
|
uninitialized pointer.
|
||||||
|
|
||||||
|
This patch removes the message from the queue before it's freed.
|
||||||
|
|
||||||
|
* rpc/virnetserverclient.c: virNetServerClientDispatchRead:
|
||||||
|
- avoid use after free of RPC messages
|
||||||
|
---
|
||||||
|
src/rpc/virnetserverclient.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
|
||||||
|
index af0560e..446e1e9 100644
|
||||||
|
--- a/src/rpc/virnetserverclient.c
|
||||||
|
+++ b/src/rpc/virnetserverclient.c
|
||||||
|
@@ -987,6 +987,7 @@ readmore:
|
||||||
|
|
||||||
|
/* Decode the header so we can use it for routing decisions */
|
||||||
|
if (virNetMessageDecodeHeader(msg) < 0) {
|
||||||
|
+ virNetMessageQueueServe(&client->rx);
|
||||||
|
virNetMessageFree(msg);
|
||||||
|
client->wantClose = true;
|
||||||
|
return;
|
||||||
|
@@ -996,6 +997,7 @@ readmore:
|
||||||
|
* file descriptors */
|
||||||
|
if (msg->header.type == VIR_NET_CALL_WITH_FDS &&
|
||||||
|
virNetMessageDecodeNumFDs(msg) < 0) {
|
||||||
|
+ virNetMessageQueueServe(&client->rx);
|
||||||
|
virNetMessageFree(msg);
|
||||||
|
client->wantClose = true;
|
||||||
|
return; /* Error */
|
||||||
|
@@ -1005,6 +1007,7 @@ readmore:
|
||||||
|
for (i = msg->donefds ; i < msg->nfds ; i++) {
|
||||||
|
int rv;
|
||||||
|
if ((rv = virNetSocketRecvFD(client->sock, &(msg->fds[i]))) < 0) {
|
||||||
|
+ virNetMessageQueueServe(&client->rx);
|
||||||
|
virNetMessageFree(msg);
|
||||||
|
client->wantClose = true;
|
||||||
|
return;
|
||||||
|
--
|
||||||
|
1.8.1
|
||||||
|
|
10
libvirt.spec
10
libvirt.spec
@ -341,7 +341,7 @@
|
|||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 1.0.1
|
Version: 1.0.1
|
||||||
Release: 4%{?dist}%{?extra_release}
|
Release: 5%{?dist}%{?extra_release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
@ -353,6 +353,9 @@ URL: http://libvirt.org/
|
|||||||
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
|
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
|
||||||
Patch1: %{name}-%{version}-build-work-around-broken-kernel-header.patch
|
Patch1: %{name}-%{version}-build-work-around-broken-kernel-header.patch
|
||||||
Patch2: %{name}-%{version}-build-further-fixes-for-broken-if_bridge.h.patch
|
Patch2: %{name}-%{version}-build-further-fixes-for-broken-if_bridge.h.patch
|
||||||
|
# CVE-2013-0170 libvirt: use-after-free in virNetMessageFree() (bz
|
||||||
|
# 893450, bz 905173)
|
||||||
|
Patch3: 0001-rpc-Fix-crash-on-error-paths-of-message-dispatching.patch
|
||||||
|
|
||||||
%if %{with_libvirtd}
|
%if %{with_libvirtd}
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
@ -1088,6 +1091,7 @@ of recent versions of Linux (and other OSes).
|
|||||||
%setup -q
|
%setup -q
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if ! %{with_xen}
|
%if ! %{with_xen}
|
||||||
@ -1998,6 +2002,10 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 28 2013 Cole Robinson <crobinso@redhat.com> - 1.0.1-5
|
||||||
|
- CVE-2013-0170 libvirt: use-after-free in virNetMessageFree() (bz #893450, bz
|
||||||
|
#905173)
|
||||||
|
|
||||||
* Sun Jan 20 2013 Richard W.M. Jones <rjones@redhat.com> - 1.0.1-4
|
* Sun Jan 20 2013 Richard W.M. Jones <rjones@redhat.com> - 1.0.1-4
|
||||||
- Rebuild for libnl soname breakage (RHBZ#901569).
|
- Rebuild for libnl soname breakage (RHBZ#901569).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user