mirror of
https://git.yoctoproject.org/poky
synced 2026-09-14 21:49:33 +02:00
qemu: Security fix for CVE-2018-19489
Source: Qemu.org MR: 97453 Type: Security Fix Disposition: Backport from git.qemu.org/gemu.git ChangeID: a06fcb432d447cec2ed1caf112822dd1b4831ace Description: In the spirt of YP Compatible, sending change upstream. fixes CVE CVE-2018-19489 Affect < = 4.0.0 (From OE-Core rev: 249447828cd1ed13f9faf19793208b503acf0d30) Signed-off-by: Armin Kuster <akuster@mvista.com> Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
f381b778ae
commit
e53f7d53f4
83
meta/recipes-devtools/qemu/qemu/CVE-2018-19489.patch
Normal file
83
meta/recipes-devtools/qemu/qemu/CVE-2018-19489.patch
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
From 1d20398694a3b67a388d955b7a945ba4aa90a8a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Greg Kurz <groug@kaod.org>
|
||||||
|
Date: Fri, 23 Nov 2018 13:28:03 +0100
|
||||||
|
Subject: [PATCH] 9p: fix QEMU crash when renaming files
|
||||||
|
|
||||||
|
When using the 9P2000.u version of the protocol, the following shell
|
||||||
|
command line in the guest can cause QEMU to crash:
|
||||||
|
|
||||||
|
while true; do rm -rf aa; mkdir -p a/b & touch a/b/c & mv a aa; done
|
||||||
|
|
||||||
|
With 9P2000.u, file renaming is handled by the WSTAT command. The
|
||||||
|
v9fs_wstat() function calls v9fs_complete_rename(), which calls
|
||||||
|
v9fs_fix_path() for every fid whose path is affected by the change.
|
||||||
|
The involved calls to v9fs_path_copy() may race with any other access
|
||||||
|
to the fid path performed by some worker thread, causing a crash like
|
||||||
|
shown below:
|
||||||
|
|
||||||
|
Thread 12 "qemu-system-x86" received signal SIGSEGV, Segmentation fault.
|
||||||
|
0x0000555555a25da2 in local_open_nofollow (fs_ctx=0x555557d958b8, path=0x0,
|
||||||
|
flags=65536, mode=0) at hw/9pfs/9p-local.c:59
|
||||||
|
59 while (*path && fd != -1) {
|
||||||
|
(gdb) bt
|
||||||
|
#0 0x0000555555a25da2 in local_open_nofollow (fs_ctx=0x555557d958b8,
|
||||||
|
path=0x0, flags=65536, mode=0) at hw/9pfs/9p-local.c:59
|
||||||
|
#1 0x0000555555a25e0c in local_opendir_nofollow (fs_ctx=0x555557d958b8,
|
||||||
|
path=0x0) at hw/9pfs/9p-local.c:92
|
||||||
|
#2 0x0000555555a261b8 in local_lstat (fs_ctx=0x555557d958b8,
|
||||||
|
fs_path=0x555556b56858, stbuf=0x7fff84830ef0) at hw/9pfs/9p-local.c:185
|
||||||
|
#3 0x0000555555a2b367 in v9fs_co_lstat (pdu=0x555557d97498,
|
||||||
|
path=0x555556b56858, stbuf=0x7fff84830ef0) at hw/9pfs/cofile.c:53
|
||||||
|
#4 0x0000555555a1e9e2 in v9fs_stat (opaque=0x555557d97498)
|
||||||
|
at hw/9pfs/9p.c:1083
|
||||||
|
#5 0x0000555555e060a2 in coroutine_trampoline (i0=-669165424, i1=32767)
|
||||||
|
at util/coroutine-ucontext.c:116
|
||||||
|
#6 0x00007fffef4f5600 in __start_context () at /lib64/libc.so.6
|
||||||
|
#7 0x0000000000000000 in ()
|
||||||
|
(gdb)
|
||||||
|
|
||||||
|
The fix is to take the path write lock when calling v9fs_complete_rename(),
|
||||||
|
like in v9fs_rename().
|
||||||
|
|
||||||
|
Impact: DoS triggered by unprivileged guest users.
|
||||||
|
|
||||||
|
Fixes: CVE-2018-19489
|
||||||
|
Cc: P J P <ppandit@redhat.com>
|
||||||
|
Reported-by: zhibin hu <noirfate@gmail.com>
|
||||||
|
Reviewed-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||||
|
Signed-off-by: Greg Kurz <groug@kaod.org>
|
||||||
|
|
||||||
|
Upstream-Status: Backport
|
||||||
|
Affects: < 4.0.0
|
||||||
|
CVE: CVE-2018-19489
|
||||||
|
Signed-off-by: Armin Kuster <akuster@mvista.com>
|
||||||
|
|
||||||
|
---
|
||||||
|
hw/9pfs/9p.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
|
||||||
|
index 267a255..bdf7919 100644
|
||||||
|
--- a/hw/9pfs/9p.c
|
||||||
|
+++ b/hw/9pfs/9p.c
|
||||||
|
@@ -2855,6 +2855,7 @@ static void coroutine_fn v9fs_wstat(void *opaque)
|
||||||
|
struct stat stbuf;
|
||||||
|
V9fsFidState *fidp;
|
||||||
|
V9fsPDU *pdu = opaque;
|
||||||
|
+ V9fsState *s = pdu->s;
|
||||||
|
|
||||||
|
v9fs_stat_init(&v9stat);
|
||||||
|
err = pdu_unmarshal(pdu, offset, "dwS", &fid, &unused, &v9stat);
|
||||||
|
@@ -2920,7 +2921,9 @@ static void coroutine_fn v9fs_wstat(void *opaque)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (v9stat.name.size != 0) {
|
||||||
|
+ v9fs_path_write_lock(s);
|
||||||
|
err = v9fs_complete_rename(pdu, fidp, -1, &v9stat.name);
|
||||||
|
+ v9fs_path_unlock(s);
|
||||||
|
if (err < 0) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
||||||
@@ -30,6 +30,7 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
|
|||||||
file://CVE-2018-18849.patch \
|
file://CVE-2018-18849.patch \
|
||||||
file://CVE-2018-19364_p1.patch \
|
file://CVE-2018-19364_p1.patch \
|
||||||
file://CVE-2018-19364_p2.patch \
|
file://CVE-2018-19364_p2.patch \
|
||||||
|
file://CVE-2018-19489.patch \
|
||||||
"
|
"
|
||||||
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user