You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SLOF/SOURCES/slof-virtio-serial-Make-rea...

59 lines
2.1 KiB

From 67cbc16b3e6d34cf3932f88fd32323878026d6a0 Mon Sep 17 00:00:00 2001
From: Kautuk Consul <kconsul@linux.vnet.ibm.com>
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 <thuth@redhat.com>
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) <dgibson@redhat.com>
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
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 <kconsul@linux.vnet.ibm.com>
Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit 63b66a5147069bda815989732442cb07790609db)
Jira: https://issues.redhat.com/browse/RHEL-3709
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
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