Ok, emulation it shall be then ...
Finalized test steps:
1.
On x86 get an emulated s390x guest the way you prefer
Example with uvtool + modifications:
$ sudo apt install qemu-system-s390x
$ uvt-simplestreams-libvirt --verbose sync --source
http://cloud-images.ubuntu.com/daily arch=s390x label=daily release=focal
$ uvt-kvm create --password=ubuntu qemu-s390x-tcg release=focal arch=s390x
label=daily
$ virsh destroy qemu-s390x-tcg
That image will obviously fail to run in x86, so adapt the Guest XML to use tcg
Use something like:
<domain type='qemu'>
<name>qemu-s390x-tcg</name>
<uuid>cfac1691-2da7-49bb-bf09-c7f0cdefcf85</uuid>
<metadata>
<uvt:ssh_known_hosts
xmlns:uvt="https://launchpad.net/uvtool/libvirt/1">ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABgQDYv7mW5g+YoZH1w7v0BNTjfRA/IWM4xSKyH6zwly4W0Zl6pq1XZzO/HyoRDDVb9cXjzggyrMAKTY9749uGwg1X92OEEyJ5nOcuuhNcZJ2bgmWfvo+EqzYS8WR271Iuz3w+BQzpW6XQj7G/tnQPlnmkboFyz0UWdPhlVaBuS6LQbnRHrPWe/gc20NgOaRQf9Jq5GmXO4YywYiXJpQgqu4vrEwr1d/LQcd4oZMnErvLsCZ0pUlQK3WYHSk3F2kWaBigJsJHS6zhkGUdAFlIEqSbjuNuhuyFMdRUyAvHnY7whXOHKUsChnSinqescwfSjk2dHEOqxeIL1AyYxAzRtRd6U4F14BhoG5gphKFrle5oIf6tVidjReEHNCWfAaJPMSmRBhoaSRA4YKq/7T58dKp6FvqlmceT21lJOzRWtSp7C1xCxhomWNJFUBpupmL5WdPDfdvmqiUQaKrRBymP+yOp18TSEhqZrbvNUMsIOl8lkllnRlyp2CiQXA5RvgshKIA0=
root@localhost
ssh-dss
AAAAB3NzaC1kc3MAAACBALdhwADEpIp/K23jFoXlLeSi6bbGyXs+wIiQgITaSrOBVnEA63kyckWXCn/0A8zXEWF11Y4uNikZJL+49vJu412IFfVgzV8tHYnq7cVAT/WJMencfWkYFNnyqtn8w7jk3DoSXvhcjs/saiswWzKbxpMazPBGNuNbM32rLmaKY4LZAAAAFQCfHHCB16tMrLleWCr9+1AItKDTQwAAAIEAoyUeXONb8/Tb+qMRN6/qfHAGZAwxEhd1LM8DKLhFsUxqFCpyhZr7QXic/RDt4Op3jMaLPht/Un3+l5nW/h4Vs0vSkC9Q8l0t/92DV67hT+lKRJXdfE4OGgUMC32jPhQ574JdOru+4wSJEXR4yCymP8BAkEr8l+LE8aa8cqO5tuMAAACAU8CQAsXsLKHm01ES/HqWxwk8skxHsaJuCwxdIZMbFVzWO8TcjftJ21ymg3t97PPeTiojTZrVgpIUemfP1spqlawf+VeXUat6Q0Uh6DF7KvjRb6DNkfGlxzIvO9LBsJmvc3VohSQ9psf3JNfoQh/NeGj6F3Yz8pi3NpOKpN+DRec=
root@localhost
ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGsr5+bBmrFA4Qfv94Dj+Qwm8GjR1WsWORBfZP8QPO0HmL9uOEvtPn12W6zchY+svA0u4136ZFp/I2hZ6LXOCf0=
root@localhost
ssh-ed25519
AAAAC3NzaC1lZDI1NTE5AAAAIMstvO+G5089bnuUbur+pOz5RaDpx1IgtxOi3a510bSO
root@localhost
</uvt:ssh_known_hosts>
</metadata>
<memory unit='KiB'>524288</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='s390x' machine='s390-ccw-virtio-focal'>hvm</type>
<boot dev='hd'/>
</os>
<cpu mode='custom' match='exact' check='none'>
<model fallback='forbid'>qemu</model>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-s390x</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/uvtool/libvirt/images/qemu-s390x-tcg.qcow'/>
<target dev='vda' bus='virtio'/>
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/uvtool/libvirt/images/qemu-s390x-tcg-ds.qcow'/>
<target dev='vdb' bus='virtio'/>
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
</disk>
<controller type='pci' index='0' model='pci-root'/>
<controller type='virtio-serial' index='0'>
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0003'/>
</controller>
<interface type='network'>
<mac address='52:54:00:a5:27:b9'/>
<source network='default'/>
<model type='virtio'/>
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
</interface>
<console type='pty'>
<target type='sclp' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<memballoon model='virtio'>
<address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0004'/>
</memballoon>
<panic model='s390'/>
</devices>
</domain>
$ virsh start --console qemu-s390x-tcg
# wait as in the emulator this will need a while.
2. In that guest prep the load
Note you have to run those as root
# prereq
$ sudo apt update
$ apt install binutils
# define probe
$ bash
$ echo "r:bash_readline /usr/bin/bash:0x$(nm -D /usr/bin/bash | awk '/T
readline$/ {print $1}')" > /sys/kernel/debug/tracing/uprobe_events
# check if the probe is active and enable it
$ cat /sys/kernel/debug/tracing/uprobe_events
r:uprobes/bash_readline /usr/bin/bash:0x00000000000dd250
$ echo 1 >/sys/kernel/debug/tracing/events/uprobes/bash_readline/enable
# Start bash (or actually do anything in your ssh login which also is in bash)
to trigger some traces
$ /usr/bin/bash -c 'echo $BASH_VERSION'
Bad case:
bash will exit on most activities (anything that involves readline like typing
a command)
Good case:
bash survives
Note: There are no log entries in Host qemu log or journal
To reset the test case you can disable tracing from the outside without
triggering readline like:
$ uvt-kvm ssh qemu-s390x-tcg "echo 0 | sudo tee
/sys/kernel/debug/tracing/events/uprobes/bash_readline/enable"
0
$ uvt-kvm ssh qemu-s390x-tcg "sudo cat
/sys/kernel/debug/tracing/events/uprobes/bash_readline/enable"
0
Then you can ssh-log in again and now it would work in good and bad case:
ubuntu@qemu-s390x-tcg:~$ /usr/bin/bash -c 'echo $BASH_VERSION'
5.0.17(1)-release
** Description changed:
+ [Impact]
+
+ * A bad return in handling uretprobe makes qemu tcg to crash the probed
+ application.
+
+ * Fix is small and upstream, backport as SRU to fix it in active releases
+ as well
+
+ [Test Plan]
+
+ * See
+ https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1929926/comments/8
+
+ [Where problems could occur]
+
+ * Changes are limited to s390x TCG, so that is the kind of use cases to
+ look out for potential issues as well.
+
+ [Other Info]
+
+ * TODO: we need to clarify the importance of this before fully entering
+ SRU
+
+
+ ------------
+
+
--Problem Description---
Using an uretprobe in QEMU without hardware acceleration causes a SIGSEGV.
-
+
---uname output---
na
-
- Machine Type = na
-
+
+ Machine Type = na
+
---Debugger---
A debugger is not configured
-
+
---Steps to Reproduce---
- Run attach_probe eBPF testcase in QEMU.
+ Run attach_probe eBPF testcase in QEMU.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/testing/selftests/bpf/prog_tests/attach_probe.c?h=v5.12#n73
-
- Userspace tool common name: na
- The userspace tool has the following bit modes: 64-bit
- Userspace rpm: na
- Userspace tool obtained from project website: na
+ Userspace tool common name: na
+ The userspace tool has the following bit modes: 64-bit
+ Userspace rpm: na
+ Userspace tool obtained from project website: na
- Fix:
https://git.qemu.org/?p=qemu.git;a=commit;h=86131c71b13257e095d8c4f4453d52cbc6553c07
+ Fix:
+
https://git.qemu.org/?p=qemu.git;a=commit;h=86131c71b13257e095d8c4f4453d52cbc6553c07
Package qemu
- focal (20.04LTS) 1:4.2-3ubuntu6.14
- groovy (20.10) 1:5.0-5ubuntu9.6
- hirsute (21.04) 1:5.2+dfsg-9ubuntu2
- impish (metapackages): 1:5.2+dfsg-9ubuntu3
+ focal (20.04LTS) 1:4.2-3ubuntu6.14
+ groovy (20.10) 1:5.0-5ubuntu9.6
+ hirsute (21.04) 1:5.2+dfsg-9ubuntu2
+ impish (metapackages): 1:5.2+dfsg-9ubuntu3
It would be good to have this fix in 20.04 and the later ones.
-
The patch applies cleanly to all levels.
** Changed in: qemu (Ubuntu Focal)
Importance: Low => Wishlist
** Changed in: qemu (Ubuntu Hirsute)
Importance: Low => Wishlist
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1929926
Title:
[UBUNTU 21.10] qemu: target/s390x: Fix translation exception on
illegal instruction
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/1929926/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs