From 67cbc16b3e6d34cf3932f88fd32323878026d6a0 Mon Sep 17 00:00:00 2001 From: Kautuk Consul Date: Tue, 29 Aug 2023 10:12:00 +1000 Subject: [PATCH 1/2] virtio-serial: Make read and write methods report failure RH-Author: Thomas Huth RH-MergeRequest: 1: Fix SLOF crash when only using virtio console (without spapr-vty) RH-Jira: RHEL-3709 RH-Acked-by: David Gibson (Red Hat) RH-Acked-by: Laurent Vivier RH-Commit: [1/2] 7aee41dceade77a47edd794cab43672ff95896d0 The read and write methods return successfully even if the virtio device is closed (virtiodev is 0) and it is not able to send or receive any characters. Make the read and write methods return 0 to indicate they did not succeed in this case. This also fixes an invalid stack access in the read method. Fixes: 8174acd ("virtio-serial: Close device completely") Signed-off-by: Kautuk Consul Signed-off-by: Jordan Niethe Reviewed-by: Thomas Huth Signed-off-by: Alexey Kardashevskiy (cherry picked from commit 63b66a5147069bda815989732442cb07790609db) Jira: https://issues.redhat.com/browse/RHEL-3709 Signed-off-by: Thomas Huth --- board-qemu/slof/virtio-serial.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/board-qemu/slof/virtio-serial.fs b/board-qemu/slof/virtio-serial.fs index 82868e2..41e2e04 100644 --- a/board-qemu/slof/virtio-serial.fs +++ b/board-qemu/slof/virtio-serial.fs @@ -67,7 +67,7 @@ virtiodev virtio-serial-init drop ; : write ( addr len -- actual ) - virtiodev 0= IF nip EXIT THEN + virtiodev 0= IF 2drop 0 EXIT THEN tuck 0 ?DO dup c@ virtiodev SWAP virtio-serial-putchar @@ -78,7 +78,7 @@ virtiodev virtio-serial-init drop : read ( addr len -- actual ) 0= IF drop 0 EXIT THEN - virtiodev 0= IF nip EXIT THEN + virtiodev 0= IF drop 0 EXIT THEN virtiodev virtio-serial-haschar 0= IF 0 swap c! -2 EXIT THEN virtiodev virtio-serial-getchar swap c! 1 ; -- 2.41.0