qemu-s390x-softmmu: crash

Bug #1860920 reported by Jean-Gabriel Kammerer
256
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Thomas Huth

Bug Description

Trying to compile and use rust programs on an s390x emulated machine, crash in qemu/target/s390x/translate.c line 3894

Steps to reproduce:
on a amd64 PC, installed debian on s390x emulated by qemu, seems to work fine (installed some packages, etc.)
installed rust cargo (either from rustup or from debian)
cargo install anything makes *qemu* crash when beginning to compile

Technical details:
* host: amd64 Linux
* qemu v4.2.0 (recompiled from git with debug options using configure --target-list=s390x-softmmu --enable-debug) (problem appears also with older versions of qemu from git, with default compilation options, with qemu from debian, etc.)
* compiled with gcc 9.2
* command line, relevant part: qemu-system-s390x -snapshot -machine s390-ccw-virtio -cpu max,zpci=on -serial mon:stdio -display none -m 512
(tested with -smp 4 -m 4096 as well and without snapshotting)
* command line, less relevant part: -drive file=./debian.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-ccw,devno=fe.0.0001,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1,scsi=off -netdev user,id=mynet0,hostfwd=tcp::2223-:22 -device virtio-net-pci,netdev=mynet0
* core dump: abort in qemu/target/s390x/translate.c line 3894 ; s->field: op has value 0xEC and op2 has value 0x54
(more info available if needed)

Tried to patch source to add 0x54 case to no avail.
Tried other cpu variants to no avail as well.

Reporting this in security as well since it also looks very much like a DoS (albeit somewhat minor), feel free to tell me to report the bug somewhere else.

Tags: s390x
description: updated
Thomas Huth (th-huth)
information type: Private Security → Public Security
Revision history for this message
Thomas Huth (th-huth) wrote :

There is definitely something wrong here ;-) According to the "Principles of Operations" ISA document, opcode 0xEC54 is the RNSBG instruction (ROTATE THEN AND SELECTED BITS). But op_rosbg() apparently currently handles 0xEC55, 0xEC56 and 0xEC57. 0xEC55 seems wrong there, since this opcode should be handled by op_risbg() instead (according to target/s390x/insn-data.def). So the "case 0x55" seems to be a typo. Does it work if you replace "case 0x55" with "case 0x54" ?

Revision history for this message
Thomas Huth (th-huth) wrote :

Suggested patch:
https://lists.gnu.org/archive/html/qemu-devel/2020-01/msg07514.html
"target/s390x/translate: Fix RNSBG instruction"

Changed in qemu:
assignee: nobody → Thomas Huth (th-huth)
status: New → Confirmed
Revision history for this message
Jean-Gabriel Kammerer (jgkammerer) wrote :

Sorry for delay in answering, replacing 0x55 by 0x54 works fine for me.

Thanks.

Revision history for this message
Laurent Vivier (laurent-vivier) wrote :
Changed in qemu:
status: Confirmed → Fix Committed
Changed in qemu:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public Security information  
Everyone can see this security related information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.